Php 正则表达式失败,我可以';我不明白为什么
我想我看这个太久了。 我似乎无法让这个正则表达式工作 代码: (来自评论):Php 正则表达式失败,我可以';我不明白为什么,php,regex,Php,Regex,我想我看这个太久了。 我似乎无法让这个正则表达式工作 代码: (来自评论): 我希望它能打印出B-25-1abc-SW-19#文本,但它没有打印任何内容,因为它没有进入if语句的真实部分 我还尝试将模式更改为: $pattern='/^$([0-9A-Z\-])*(#)(\s*)/i'; 但这也没有解决问题 您可能放错了量词(尽管它仍应匹配整个字符串): 应该是: $pattern='/([0-9A-Z\-]*)(#)(\s*)/i'; 如果它真的只是匹配[0],您应该检查原始字符串,也许
我希望它能打印出
B-25-1abc-SW-19#
文本,但它没有打印任何内容,因为它没有进入if语句的真实部分
我还尝试将模式更改为:
$pattern='/^$([0-9A-Z\-])*(#)(\s*)/i';
但这也没有解决问题 您可能放错了量词(尽管它仍应匹配整个字符串): 应该是:
$pattern='/([0-9A-Z\-]*)(#)(\s*)/i';
如果它真的只是
匹配[0]
,您应该检查原始字符串,也许您的-
中有一些utf8字符,而不是模式中的减号字符(或者相反)。星星在第一个后面,而不是]:)
我也在phpfiddle上试过,它确实会返回结果。我也对你的正则表达式做了一些编辑
也许您正在处理的字符串有问题?您希望它做什么?它做什么?我希望它打印出B-25-1abc-SW-19#文本。。。但它并没有打印出任何东西。。。没有匹配项…@dot在我的测试中,它会打印出来。这个精确的代码会打印出
B-25-1abc-SW-19
对于我来说,刚刚试过,它匹配。如果您能给我们您的调试输出(例如,print_r$matches)将不会产生实际影响,除非访问了$1
捕获组,这会更好。@Michael Berkowski是真的,但我猜这就是OP的目的。正则表达式应该在匹配[0]
的地方匹配,因此这是我能看到的一个可能的问题。如何测试utf8字符场景?@dot您可以看到字符串和htmlentities($your_string)
之间是否有差异。可能还有其他的方法,但这是我第一次想到的。
$pattern='/([0-9A-Z\-])*(#)(\s*)/i';
$pattern='/([0-9A-Z\-]*)(#)(\s*)/i';
$pattern='/([0-9A-Z\-]*)(#)(\s*)/i';
$matches= array();
if (preg_match($pattern,'B-25-1abc-SW-19# ',$matches) ) {
print_r($matches);
}
//N.B.
//http://php.net/manual/en/function.preg-match.php
//If matches is provided, then it is filled with the results of search. $matches[0] will contain the text that matched the full pattern, $matches[1] will have the text that matched the first captured parenthesized subpattern, and so on.