preg_match错误:编译失败:字符类缺少终止符]。

6
我有一系列的.txt文件需要在for循环中读取。我在一些文本文件中放置了一个标记,形式为[widget_]。
因此,文本文件的整个内容可能是[widget_search]。另一个文本文件可能包含内容[widget_recent-posts]。其他文件可能只有HTML格式的文本,没有这个标记。
在for循环中,我正在执行preg_match以查看文本文件是否与我的标记模式匹配。如果匹配,我将执行某些条件代码。
但是,当我运行跟踪测试以查看是否有匹配项时,出现了错误。
错误如下:
警告:preg_match() [function.preg-match]:编译失败:缺少终止字符] 位于C:\ xampplite \ htdocs \ test \ wp-content \ plugins \ widget-test \ widget-test.php的第227行
以下是第227行的代码:
if (preg_match("/[widget_/i",$widget_text)) {//do something}
2个回答

16

你应该像这样转义[字符:

if (preg_match("/\[widget_/i",$widget_text)) { // do something }

我觉得这是一件简单的事情。您建议我更改令牌的格式以避免需要转义字符或其他潜在问题吗? - Scott B
1
使用[]没有问题 - 只是它们恰好是正则表达式中的元字符。使用任何分隔符都可以,只需注意可能会有其他函数/模块也将该替代字符用作元字符。 - Marc B
感谢您的快速帮助和解释。+1 - Scott B

1

使用preg_quote更加清晰,像这样:

if (preg_match(preg_quote("/[widget_/i"),$widget_text)) {//do something}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接