我试图找出如何在字符串中找到匹配项。
我正在寻找以下任何- = ? [] ~ # ! 0 - 9 A-Z a-z
的匹配项,我需要知道它匹配的内容。
例如:匹配!
,或匹配=
和#
以及?
通常我会用这个:
$a = 'How are you?';
if (strpos($a, 'are') !== false) {
echo 'true';
}
但是我不知道该怎么做才能查找所需的字符。
我也可以[]
,[]
或[xxxx]
,其中xxxx可以是任意数量的字母数字字符。
我需要匹配列出的任何字符,返回字符,以便我知道匹配的内容以及[]是否包含任何值返回。
例如:
$a = 'DeviceLocation[West12]';
将返回:$match = '[]'; $match_val= 'West12';
$a = '#=Device';
将返回:$match = '#,=';
$a= '?[1234]=#Martin';
将返回:$match = '?, [], =, #'; $match_val= '1234';
任何人都可以建议我如何做到这一点。 感谢
答案 0 :(得分:1)
请使用正则表达式,例如使用preg_match
答案 1 :(得分:1)
试试这个
它将匹配preg_match_all("/\[([^\]]*)\]/", $text, $matches);
?
这将匹配#=
和preg_match_all("/^#=(\S+)|\?(.*)/", $text, $matches);
var_dump($matches);
{{1}}
答案 2 :(得分:1)
嗯,这些要求有点模糊,但这是我推断的:
1)如果方括号内有字母数字字符串,则将其作为单独的值
2)所有其他提到的字符应逐一匹配,然后implode
d。
您可以使用以下正则表达式获取所需的值:
$re = '@\[([a-zA-Z0-9]+)\]|[][=?~#!]@';
详细:
\[
- [
([a-zA-Z0-9]+)
- 第1组值捕获1个或多个字母数字符号\]
- 结束]
|
- 或[][=?~#!]
- 单个字符,集合中定义的字符之一。请参阅regex demo。这里最重要的是获得匹配的代码(随意适应):
$re = '@\[([a-zA-Z0-9]+)\]|[][=?~#!]@';
$strs =array('DeviceLocation[West12]', '#=Device', '?[1234]=#Martin');
foreach ($strs as $str) {
preg_match_all($re, $str, $matches, PREG_SET_ORDER);
$results = array();
$match_val = "";
foreach ($matches as $m) {
if (!empty($m[1])) {
$match_val = trim($m[1], "[]");
array_push($results, "[]");
} else {
array_push($results, $m[0]);
}
}
echo "Value: " . $match_val . "\n";
echo "Symbols: " . implode(", ", $results);
echo "\n-----\n";
}
请参阅PHP demo
输出:
Value: West12
Symbols: []
-----
Value:
Symbols: #, =
-----
Value: 1234
Symbols: ?, [], =, #
-----
答案 3 :(得分:0)
您需要regular expressions来检查另一个具有不同属性的文本,这是一个关于该链接的简单教程。