【问题标题】:How do you tell whether preg_replace() didn't match or matched from start?你如何判断 preg_replace() 是不匹配还是从一开始就匹配?
【发布时间】:2009-06-04 01:39:03
【问题描述】:

两个条件都返回false,如何区分?

不使用第三个参数可以吗?

【问题讨论】:

  • 你能提供一些示例代码吗?你确定你在谈论 preg_replace() 吗?第三个参数是必填的主题。 PHP 手册说 preg_replace() 也不返回 false ,但错误时返回 null ,不匹配时返回原始主题,如果找到匹配则修改主题。

标签: php regex preg-replace


【解决方案1】:

您可能正在谈论strpos,如果它不匹配任何内容,则返回 false;如果“needle”与“haystack”的开头匹配,则返回 0。这些都是“假”值,因此您需要使用三等号运算符显式检查它们:

if (strpos($haystack, $needle) === false) {
    // $needle NOT found in $haystack.
} else {
    // $needle was found in $haystack.
}

【讨论】:

    【解决方案2】:

    preg_replace 可以有多个引用,因此如果您首先引用 /^(.){min,max} 之类的内容,其中 min/max 是您在开始时尝试匹配的最小/最大字符数,则匹配将是 \\1下一组括号将是 \\2 等等。

    如果没有更多信息,很难判断此解决方案或其他解决方案是否有效。

    【讨论】:

      【解决方案3】:

      也许你可以在这里放一些示例代码,但你可以查看第五个参数:$count,这是完成的替换次数。

      【讨论】:

        【解决方案4】:

        创建一个包含搜索字符串的临时变量。

        替换后检查是否新字符串 == temp var。

        如果等价返回false,否则返回true。

        【讨论】:

          猜你喜欢
          • 2013-11-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-07
          • 2018-11-22
          • 1970-01-01
          • 2013-11-22
          • 2022-06-20
          相关资源
          最近更新 更多