【发布时间】:2018-10-26 07:00:39
【问题描述】:
我有一个正则表达式数组 -$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 = 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(): Unknown modifier '(' in ...index.php on line
我的错误在哪里? 谢谢。
【问题讨论】:
-
你的正则表达式需要在//之间,所以你需要从数组的每个值中删除//,同时删除表示不区分大小写的“i”,并将它放在//i之后,并且/implode()/i 之间的数组内爆的所有数据
-
@user889349 为什么不循环数组并测试每个正则表达式?
-
@splash58 那会慢很多,恕我直言
-
但是 OP 现在应该确保删除诸如
/i之类的选项不会改变正则表达式的逻辑。
标签: php arrays regex preg-match-all