2011-03-25 61 views
3

我有一系列.txt文件,我正在阅读for循环。我已经在一些文本文件中放置了一个令牌[widget_]preg_match错误:编译失败:缺少终止]字符类

因此,例如,文本文件的全部内容可能是[widget_search]。另一个文本文件可能包含内容[widget_recent-posts]。其他人可能只是HTML格式的文本,根本没有令牌。

在for循环中,我正在做一个preg_match来查看文本文件是否与其中的内容匹配我的令牌模式。如果匹配,我正在执行一些条件代码。

但是,当我运行跟踪测试以查看是否存在匹配时,出现错误。

错误是:

警告:的preg_match()[function.preg匹配]:编译失败:用于字符类缺少终止]在C的失调8:\ Xampplite文件\ htdocs中\测试\可湿性粉剂内容上线\插件\插件测试\小部件,test.php的227

而这里的代码在行227:

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

回答

12

你应该逃脱[文字是这样的:

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

+0

我想这是简单的东西。您是否会建议我更改我的令牌格式以避免不必逃避角色或其他潜在问题? – 2011-03-25 14:03:23

+1

使用[]没有什么问题 - 只是它们碰巧是正则表达式中的元字符。使用你想要的任何分隔符,只要知道可能有一些其他功能/模块使用该替代字符作为元字符。 – 2011-03-25 14:08:27

+0

感谢您的快速帮助和exlano。 +1 – 2011-03-25 14:11:27

0

它更清洁使用preg_quote这样的:

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