my $str='expire=0';
if ($str =~/expire\s*=\s* (?: 0[1-9]|[1-9][0-9])/){
print " found it ";
}
條件expire=
應遵循1-99
之間的數字?
my $str='expire=0';
if ($str =~/expire\s*=\s* (?: 0[1-9]|[1-9][0-9])/){
print " found it ";
}
條件expire=
應遵循1-99
之間的數字?
您正則表達式中有空格,刪除它們:
/expire\s*=\s* (?: 0[1-9]|[1-9][0-9])/
^^
而且正則表達式0[1-9]|[1-9][0-9]
不匹配0
。
編輯:
根據您的意見,您希望允許從1-99
一些expire=
後,所以你可以使用:
/^expire\s*=\s*(?:[1-9]|[1-9][0-9])$/
或較短的版本:
/^expire\s*=\s*(?:[1-9][0-9]?)$/
由於你的例子在expire=
之後有0
它不會不匹配。
另請注意,我已經添加了開始和結束錨點。沒有它們,正則表達式可能會匹配輸入的任何有效子字符串。例如,它可以在輸入expire=999
匹配expire=99
您有第二\ S *和非捕獲組的開始之間的空間。試試這個:如果你想使用的空間在您的正則沒有他們真正匹配空間
~/expire\s*=\s*(?:0[1-9]|[1-9][0-9])/
還是不匹配? – Tree 2011-03-03 13:01:19
,您需要使用x
修改你的正則表達式。即/ foo /x
匹配字符串「foo」,而/ foo /
只匹配「foo」。
不錯的提示,但我會說這使得正則表達式一目瞭然難以閱讀。 – 2011-03-03 12:45:38
@Josh在現實世界中嘗試它,形式複雜。很高興能夠分離相關的比特,甚至可以在線上劃分它:) – hobbs 2011-03-03 12:48:40
@ hobbs我做到了!無論哪種方式工作... – 2011-03-03 22:14:38
爲什麼你甚至在這種模式下使用非捕獲組? – Sam 2011-03-03 12:59:28
要將「或」表達式分組......爲什麼要捕獲如果您不需要提取它? – 2011-03-03 14:38:33
什麼「或」表達? – Sam 2011-03-24 08:33:20