我看一些老的Perl/CGI代碼調試的問題,發現很多用途:正則表達式 d匹配減號和/或小數點嗎?
\d - Match non-digit character
\D - Match digit character
大多數在線文檔提到\ d相同[0-9],其是我一直認爲的。但是,我也注意到提到字符集差異的Stackoverflow問題。
Does "\d" in regex mean a digit?
是否\也可爲d匹配一個減號和/或小數點?
我打算做一些測試。
我看一些老的Perl/CGI代碼調試的問題,發現很多用途:正則表達式 d匹配減號和/或小數點嗎?
\d - Match non-digit character
\D - Match digit character
大多數在線文檔提到\ d相同[0-9],其是我一直認爲的。但是,我也注意到提到字符集差異的Stackoverflow問題。
Does "\d" in regex mean a digit?
是否\也可爲d匹配一個減號和/或小數點?
我打算做一些測試。
我不知道Perl如何確定是使用Unicode還是ASCII或默認地區爲(無標記,無use
)。無論如何,通過聲明use re '/a';
(ASCII)或use re '/u';
(Unicode)或use re '/l';
(語言環境),您將清楚地向Perl解釋器(和人類閱讀器)表明您要使用哪種模式並避免意外行爲。
由於改性劑的效果,\d
具有至少2名的含義:
/a
標誌(ASCII)的效果,\d
將匹配從0
到9
(不多也不少)數字。在/u
標誌(Unicode)的效果,\d
將匹配的任何語言的任何小數位,並且等同於\p{Digit}
reference。這實際上使得\d+
非常無用且危險,因爲它允許混合使用任何語言的數字。從/u
標誌
而且,
\d+
,說明報價可以匹配的是來自不同的書寫系統的混合數字字符串,創建一個安全問題。可以用
num() in Unicode::UCD
來解決這個問題。或者/a
修改器可以使用到9
\d
匹配只是ASCII 0
\d
不會匹配任何標誌或標點,因爲這些字符不屬於Nd
(數字,十進制數)Unicode的General Category。
\ d是否也匹配減號和/或小數點?
+1 LOUD BREVITY – pilcrow 2013-05-07 01:02:20
當我讀到這個時,我忍不住拍了他的個人資料圖片中的那個孩子說出來......哈哈 – tjwrona1992 2016-05-13 15:12:22
答案是否定的。它只是做一個數字檢查。但是,Unicode使事情變得更加複雜。
如果您想確定某個數字是十進制數字,請查看Scalar::Util模塊。其中的一個功能是look_like_number
。這可以用來查看您正在查看的字符串是否可以是數字,並且比嘗試使用正則表達式更好。
這個模塊一直是標準Perl的一部分,所以你應該在你的系統上安裝它。
使用'[+ - ]?\ d +(?:\。\ d +)?'來匹配減號加號或小數點... – HamZa 2013-05-06 23:42:04
我正在考慮更嚴格的事情,例如/^[0- 9] + $ /,這應該從一開始到最後一個或多個0-9匹配。 – jjwdesign 2013-05-06 23:47:13
雖然你想匹配十進制(+ - )數字:p如果你只想匹配數字,那麼'/^\ d + $ /'很好。 – HamZa 2013-05-06 23:52:24