【问题标题】:preg_match: nothing to repeat / no matchpreg_match:没有重复/不匹配
【发布时间】:2011-03-14 11:26:49
【问题描述】:

我正在使用这个:if(!preg_match('/^+[0-9]$/', '+1234567'))

我得到了:

警告:preg_match() [function.preg-match]:编译 失败:在偏移量 1 处没有可重复的内容

有什么想法吗?


更新:现在使用这个:if(!preg_match('/^\+[0-9]$/', '+1234567'))

我没有得到匹配。

有什么想法吗?

【问题讨论】:

    标签: php regex


    【解决方案1】:

    + 是一个特殊字符,表示前一个字符的一个或多个,如果不转义它,您就是将它应用于插入符号。使用\ 对其进行转义,它将匹配文字加号。

    if(!preg_match('/^\+[0-9]$/', '+1234567'))
    

    编辑:

    不匹配的原因是因为你指定了 0-9 的 1 位数字,字符串的结尾是 $。您需要将其设置为可变数量的数字。

    if(!preg_match('/^\+[0-9]+$/', '+1234567')) {
    

    短版:

    if(!preg_match('/^\+\d+$/', '+1234567')) {
    

    【讨论】:

    • 干杯,现在已编辑问题以反映当前问题。
    • Hailwood,您不应该删除旧问题,而应该同时显示两者。 (只是为了做到这一点而编辑)。
    • 另外,当前的问题是正确的行为 - 您要求正则表达式匹配单个加号,单个 0..9,然后找到行尾位置,您的输入没有这样做。要匹配您提供的输入,您需要 ^\+[0-9]+$^\+[0-9]{7}$ 或类似的。
    • @peter 谢谢,请记住这一点@meder 干杯,完美。我实际上知道 d 标志,但是出于个人喜好使用 [0-9],因为我认为它一目了然地增加了可读性,使用标志与 [0-9] 相比有什么速度优势吗?
    【解决方案2】:

    '/^\+[0-9]$/' 表示行首必须是加号,后跟数字,然后是行尾。

    '/^\+[0-9]+$/' 表示行首必须是加号,后跟 一个或多个数字,然后是行尾。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-05
      • 1970-01-01
      • 2019-08-17
      • 1970-01-01
      • 1970-01-01
      • 2015-06-08
      相关资源
      最近更新 更多