我想用Perl中的正則表達式理解情況。爲什麼一個單詞在正則表達式(perl)中打破所有正確的輸出?
$str = "123-abc 23-rr";
需要在減號旁邊顯示兩個單詞。 正則表達式是:
@mas=$str=~/(?:([\d\w]+)\-([\d\w]+))/gx;
它顯示正確的輸出:123
,abc
,23
,rr
。 但是,如果我改變串一點,把一個單詞的開始:
$str = "word 123-abc 23-rr";
而且我要考慮到這第一個字,所以我改變我的正則表達式:
@mas=$str=~/\w+\s(?:\s*([\d\w]+)\-([\d\w]+))*/gx;
我的輸出必須相同,但有:23
,rr
。如果我刪除\s*
或*
,則輸出爲123
,abc
。但它仍然是不正確的。有人知道爲什麼
你可以閱讀關於*捕捉重複組* [這裏](http://www.regular-expressions.info/captureall.html) –
當您指定輸入字符串的特定開始,你不能告訴引擎在大量的正則表達式上進行'全局'匹配。 – revo
另請參閱[重複捕獲和解析](http://blogs.perl.org/users/sirhc/2012/05/repeated-capturing-and-parsing.html)。請注意,它不是第一個「\ w +」是「罪魁禍首」,而是您在非捕獲組上設置的'*'量詞。 –