【问题标题】:PHP regex any numberPHP正则表达式任意数字
【发布时间】:2016-09-01 05:07:32
【问题描述】:

我搜索像这样的数字+空格+数字+空格+任何东西的模式

如果现在有这个:

if( preg_match( '[0-9][ ][0-9][ ].', $searchString ) )

这似乎工作正常,但在数字上失败了。据我所见,应该有一个“任意数字”的选择器。我怎样才能在正则表达式中做到这一点。

对于这些情况,它应该返回 true:

0 0 asdf
1 0 asdf
0 30 adsf asdf
22 0 a
...

【问题讨论】:

    标签: php regex


    【解决方案1】:

    [0-9] 只接受整数 0,1,2,3,4,5,6,7,8,9。对于任何整数,您需要允许[0-9] 重复一次或多次。如果你使用快捷方式\d 代替[0-9] 那么你可以写成

    \d+ \d+ .*

    + 符号表示一次或多次重复

    注意: 这似乎是您对 reg 表达式的新手。试试这个free regex tutorial

    【讨论】:

    • 感谢您的 tut ;) 我肯定试一试
    【解决方案2】:

    看到你的正则表达式应该在 //.但除此之外,您应该意识到您的 [0-9] 只是在寻找一个数字的强制性 ONE 实例。

    将其更改为 [0-9]+ 应该可以解决您的问题,但我认为从长远来看,先学习一些正则表达式会对您有所帮助。

    【讨论】:

    • 感谢您的回答;)它非常简单......应该可以将多个答案标记为已接受._.
    • 呵呵,没问题。请随意标记您认为有最佳答案的人。
    【解决方案3】:

    如下所示更改您的正则表达式模式:

    $re = "/\d+? \d+? .*$/";
    
    var_dump(preg_match($re, "0 30 adsf asdf"));  // 1
    var_dump(preg_match($re, "22 0 a"));          // 1
    

    详情

    • \d+? - 至少应匹配一个数字
    • .*$ - 匹配字符串末尾的任何字符

    【讨论】:

    • 感谢您的回答。对此进行了测试,它工作得很好。似乎正则表达式中有很多方法可以捕捉到这样的模式。如另一条评论中所述,应该可以将多个答案标记为已接受/正确
    猜你喜欢
    • 2011-06-23
    • 1970-01-01
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多