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

数量詞を置き忘れた可能性があります(ただし、文字列全体と一致する必要があります)。

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

する必要があります:

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

それが本当にmatches[0]あなたが求めているものである場合は、元の文字列を確認する必要があります。おそらく、パターンにあるマイナス文字ではないutf8文字が-あります(またはその逆)。

于 2013-02-14T16:21:59.617 に答える
1

私はphpfiddleで試してみましたが、結果が返されました。また、正規表現にいくつかの編集を加えました。

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

おそらく、作業している文字列に問題がありますか?

于 2013-02-14T16:44:39.497 に答える
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 に答える