PHP中的正则表达式问题

我试图利用以下正则表达式模式:

$regex = '/Name: [a-zA-Z ]*] [0-9]/';

在Rubular中进行测试时,它可以正常工作,但使用PHP时,表达式永远不会返回true,即使它应该如此。 顺便说一句,如果我删除了“[0-9]”部分,它工作正常。 我忽略了PHP的正则表达式有一些区别吗?

编辑:我正在寻找字符“名称:”,然后是包含任意数量的字母或空格的名称,然后是“]”,然后是空格,然后是单个数字。 所以“名称:克里斯”5“将返回true,”名称:克里斯“[lorem ipsum]”应该返回false。

我也尝试转义第二个括号“ [ ”,但这并没有解决问题。


没有例子,你不清楚你的用例是什么,但似乎你想要这样的东西?

$regex = '/Name: ([w]+) ([w]+)/';

更新:试试这个:

$regex = '/Name: [ws]+?] [d]{1}/';

对我来说这匹配

Name: Foo Bar] 2

..但不是这些:

Name: Foo Bar] foo
Name: Foo Baz 5

我也为字符类使用短手表达式:

  • [ w]是[a-zA-Z0-9]的缩写(例如,所有字母数字字符)
  • [ s]匹配任何空格
  • [ d]匹配任何数字
  • 为了安全起见,我还使用'?' 以非贪婪的方式匹配,以确保thw [ w s] + match不会消耗太多的字符串。


    我认为这可能是因为正则表达式中的空间也是你想逃避第二个]。 尝试

    $regex = '/Name:s[a-zA-Z ]*]s[0-9]/';
    

    或者使用修饰符

    $regex = '/Name: [a-zA-Z ]*] [0-9]/x';
    

    更多关于修饰符在这里PHP:可能的修饰符在正则表达式模式 - 手动


    你给出的两个例子对你我的正则表达式很好。

    $arr = array('Name: Chris] 5', 'Name: Chris] [lorem ipsum]');
    foreach ($arr as $str) {
        if (preg_match('/Name: [a-zA-Z ]*] [0-9]/', $str)) {
            echo "$str : OKn";
        } else {
            echo "$str : KOn";
        }
    }
    

    输出:

    Name: Chris] 5 : OK
    Name: Chris] [lorem ipsum] : KO
    

    ]和数字之间可能有多个空格,所以你的正则表达式应该是:

    [a-zA-Z ]*]s+[0-9]/
    
    链接地址: http://www.djcxy.com/p/92695.html

    上一篇: Regex Problem in PHP

    下一篇: Undefined PHP function filter