Php 展平正则表达式数组
我有一个正则表达式数组-$toks:Php 展平正则表达式数组,php,arrays,regex,preg-match-all,Php,Arrays,Regex,Preg Match All,我有一个正则表达式数组-$toks: Array ( [0] => /(?=\D*\d)/ [1] => /\b(waiting)\b/i [2] => /^(\w+)/ [3] => /\b(responce)\b/i [4] => /\b(from)\b/i [5] => /\|/ [6] => /\b(to)\b/i ) 当我试图压平它时: $patterns_flattened = imp
Array
(
[0] => /(?=\D*\d)/
[1] => /\b(waiting)\b/i
[2] => /^(\w+)/
[3] => /\b(responce)\b/i
[4] => /\b(from)\b/i
[5] => /\|/
[6] => /\b(to)\b/i
)
当我试图压平它时:
$patterns_flattened = implode('|', $toks);
我有一个正则表达式:
/(?=\D*\d)/|/\b(waiting)\b/i|/^(\w+)/|/\b(responce)\b/i|/\b(from)\b/i|/\|/|/\b(to)\b/i
当我试图:
if (preg_match('/'. $patterns_flattened .'/', 'I'm waiting for a response from', $matches)) {
print_r($matches);
}
- 我得到一个错误: 警告:preg_match():第行…index.php中的未知修饰符“(”
谢谢。您需要删除开头和结尾斜杠,如下所示:
$toks = [
'(?=\D*\d)',
'\b(waiting)\b',
'^(\w+)',
'\b(response)\b',
'\b(from)\b',
'\|',
'\b(to)\b',
];
然后,我想您应该使用preg\u match\u all
而不是preg\u match
:
$patterns_flattened = implode('|', $toks);
if (preg_match_all("/$patterns_flattened/i", "I'm waiting for a response from", $matches)) {
print_r($matches[0]);
}
如果您得到第一个元素而不是所有元素,它将返回每个正则表达式的全部匹配项:
Array
(
[0] => I
[1] => waiting
[2] => response
[3] => from
)
您需要删除开头和结尾斜杠,如下所示:
$toks = [
'(?=\D*\d)',
'\b(waiting)\b',
'^(\w+)',
'\b(response)\b',
'\b(from)\b',
'\|',
'\b(to)\b',
];
然后,我想您应该使用preg\u match\u all
而不是preg\u match
:
$patterns_flattened = implode('|', $toks);
if (preg_match_all("/$patterns_flattened/i", "I'm waiting for a response from", $matches)) {
print_r($matches[0]);
}
如果您得到第一个元素而不是所有元素,它将返回每个正则表达式的全部匹配项:
Array
(
[0] => I
[1] => waiting
[2] => response
[3] => from
)
要对
$tok
阵列进行一些调整
(?=\D*\D)
的意图是什么,都需要重新思考。如果输入字符串中的任何地方都有数字,则可能会生成大量空元素,这肯定不会对您的项目有任何好处。当我在输入字符串中的from
之后加上空格1
您需要对
$tok
阵列进行一些调整
(?=\D*\D)
的意图是什么,都需要重新思考。如果输入字符串中的任何地方都有数字,则可能会生成大量空元素,这肯定不会对您的项目有任何好处。当我在输入字符串中的from
之后加上空格1
正则表达式需要介于//之间,因此需要从数组的每个值中删除//,还需要删除“i”(表示不区分大小写),并将其放在//i之后,数组中的所有数据在/implode()之间内爆/i@user889349为什么不循环数组并测试每个正则表达式?@splash58这会慢得多,IMHObut OP现在应该确保删除诸如
/i
之类的选项不会更改正则表达式的逻辑。正则表达式需要介于//之间,因此需要从数组的每个值中删除/,同时删除“i”这意味着不区分大小写,并将其放在//i之后,数组中的所有数据都在/impold()之间内爆/i@user889349为什么不循环数组并测试每个正则表达式?@splash58这会慢得多,IMHObut OP现在应该确保删除诸如/i
之类的选项不会改变正则表达式的逻辑。
array (
0 => 'I',
1 => 'waiting',
2 => 'response',
3 => 'from',
)