Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 正则表达式失败,我可以';我不明白为什么_Php_Regex - Fatal编程技术网

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.