【问题标题】:preg_match error: Compilation failed: missing terminating ] for character classpreg_match 错误:编译失败:字符类缺少终止]
【发布时间】:2011-07-22 22:49:42
【问题描述】:

我有一系列 .txt 文件,我正在 for 循环中读取这些文件。我在一些文本文件中放置了一个令牌,格式为 [widget_]

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

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

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

错误是:

警告:preg_match() [function.preg-match]: Compilation failed: missing terminating ] for character class at offset 8 in C:\xampplite\htdocs\test\wp-content\plugins\widget-test\widget-第 227 行的 test.php

这是第 227 行的代码:

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

【问题讨论】:

    标签: php preg-match


    【解决方案1】:

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

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

    【讨论】:

    • 我认为这很简单。您是否建议我更改令牌的格式以避免转义字符或其他潜在问题?
    • 使用 [] 并没有错——只是它们恰好是正则表达式中的元字符。使用您想要的任何分隔符,请注意,可能还有一些其他功能/模块也使用该替代字符作为元字符。
    • 感谢您的快速帮助和 exlano。 +1
    【解决方案2】:

    像这样使用preg_quote 更简洁:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多