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
我也为字符类使用短手表达式:
为了安全起见,我还使用'?' 以非贪婪的方式匹配,以确保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