回答
首先,不要使用\d
,除非要匹配所有的Unicode數字字符(如𝟚或᠕)。如果你想匹配零到九,你必須說[0-9]
。
不幸的是,因爲你關心的所有比賽,並且將只保存最後一條,你不能縮短,爲
if ($Hour =~ /^([0-9]{2}){3}$/) { $result = "$1:$2:$3" }
。同樣地
if ($Hour =~ /^([0-9]{6})$/) { $result = "$1:$2:$3" }
不在。你可以說
($result = $Hour) =~ s/([0-9]{2})(?!$)/$1:/g;
但你會交易清晰度略短的一行。
在「近期」perls中,你可能會使用'\ p {POSIX_Digit}',但這在打字方面並不是很好。 – tchrist 2010-11-22 13:08:24
看起來很不錯,因爲它是。
如果需要,您可以用另一個\d
替換每個{2}
。
您可以使用$result=join":",$Hour=~/^(\d\d)/g
,但它不是嚴格的 - 它會匹配任何行開始處的任何長度爲偶數的字符串。
它會抓取任何一對數字,無論它們是否緊跟前一對。 – ysth 2010-11-22 11:11:07
看起來不錯。匹配時間可以採取各種嚴格程度。 上面將允許像999999
的另一種方法,以匹配24小時的時鐘是使用
([01]?[4-9]|[012]?[0-3])
爲一小時的部分,然後
[0-5][0-9]
爲分鐘。
或(對於它的樂趣),一小時的部分也可以用
([01]?[0-9]|2[0-3])
你的小時部分reg exp。看起來奇怪..它如何匹配像23? – 2010-11-22 13:48:06
-1:正則表達式是錯誤的。作爲之前的評論問題,您的第一個小時部分正則表達式與「23」不匹配。更糟糕的是,它*不匹配'1703',但不匹配'10','12','06' ......第二個「爲了它的樂趣」版本顯然不匹配任何小時,不包括' 2',因爲它需要在2之前的1-2個數字和在1之後的1個數字,它將不能匹配任何一個或兩個數字的數字。 – 2010-11-22 15:58:07
我覺得有些人誤入歧途 – ysth 2010-11-22 16:23:57
我會用\z
代替$
,除非你真的要允許一個可選尾部的換行符匹配。除此之外(以及變量的大小寫不一致),沒關係。
- 1. Perl的正則表達式mathjax語法
- 2. Perl正則表達式語法
- 3. Perl的IF語句正則表達式
- 4. Perl的正則表達式中的if語句[語法]
- 5. 正則表達式語法
- 6. Java中的正則表達式(正則表達式和語法)
- 7. Perl的正則表達式
- 8. Perl的正則表達式
- 9. Perl的正則表達式 - 動態正則表達式
- 10. 正則表達式中的perl正則表達式
- 11. Perl:正則表達式
- 12. perl redirectmatch正則表達式
- 13. 正則表達式在Perl
- 14. Perl正則表達式
- 15. Perl正則表達式\ U
- 16. Perl正則表達式
- 17. 用perl正則表達式
- 18. PCRE - perl正則表達式
- 19. 正則表達式 - Perl
- 20. Perl Oneliner正則表達式
- 21. Perl正則表達式在\
- 22. 正則表達式用Perl
- 23. Javascript/Perl正則表達式
- 24. 正則表達式在Perl
- 25. Perl正則表達式在@
- 26. 在Perl中使用正則表達式模式生成語法?
- 27. Perl正則表達式:需要的語法幫助
- 28. Perl的正則表達式語法錯誤
- 29. 在考慮在Perl正則表達式Perl的正則表達式
- 30. perl正則表達式:使用正則表達式捕獲
「因式分解」與正則表達式?你的意思是這樣嗎? ($ N =('o'x shift); $ N =〜/ ^(oo +?)\ 1 + $ /; $ N =〜s/$ 1/o/g){print length($ 1) 「} print length($ N),」\ n「;':) – tchrist 2010-11-22 13:07:17