0

我想我已经看这个太久了。我似乎无法让这个正则表达式工作。

代码:

$pattern='/([0-9A-Z\-])*(#)(\s*)/i'; 

if (preg_match($pattern,'B-25-1abc-SW-19# ',$matches) )  {
    echo $matches[0];
}   

(来自评论):
我期待它打印出B-25-1abc-SW-19#文本,但它没有打印任何内容,因为它没有进入 if 语句的真实部分。

我还尝试将模式更改为:

$pattern='/^$([0-9A-Z\-])*(#)(\s*)/i'; 

但这也没有解决它。

4

3 回答 3

1

我在 phpfiddle 上也试过了,它确实返回了结果。我还对您的正则表达式进行了一些编辑。

http://phpfiddle.org/main/code/3x6-6w2

也许您正在处理的字符串有问题?

于 2013-02-14T16:44:39.497 回答
1

您可能放错了量词(尽管它仍应与整个字符串匹配):

$pattern='/([0-9A-Z\-])*(#)(\s*)/i'; 

应该:

$pattern='/([0-9A-Z\-]*)(#)(\s*)/i';

如果它真的只是matches[0]你所追求的,你应该检查你的原始字符串,也许你有一些 utf8 字符-,而不是你的模式中的减号字符(或相反)。

于 2013-02-14T16:21:59.617 回答
0

星星在第一个 ) 之后,而不是 ] :)

            $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. 
于 2013-02-14T16:24:41.473 回答