我有一個匹配所有非字母數字字符的Perl正則表達式/\W/i
,但它也匹配我想忽略的空格。如何使它匹配除空格以外的非字母數字字符?如何創建一個匹配除空格以外的非字母數字字符的Perl正則表達式?
回答
你可以使用
/[^\w\s]/
這所有非單詞字符(\ W)和非空白(\ S)相匹配。
編輯:
/[^\w ]/
如果你只想要忽略空格(不是所有的空格)。
UPDATE:
刪除i
,因爲它是沒有必要的(見幾個評論)。
對於大多數用途,[^\w\s]
應該就足夠了。這隻匹配一個既不是「alphanumunder」也不是PerlSpace的字符。
這幾乎,但不是很喜歡稱它匹配任何東西既不是\p{Alphabetic}
也不\p{Digit}
也不下劃線(LOW LINE),也不\p{WhiteSpace}
,除了關於CHR 11,垂直選項卡中的weaseling,因爲這是不考慮\s
,儘管它是認爲是\p{WhiteSpace}
。
小\s
速記真的menas \p{PerlSpace}
,不\p{WhiteSpace}
。 \p{Space}
與\p{WhiteSpace}
相同。唯一的\S
字符(意思是,不是\s
)這也是\p{Space}
是那個討厭的垂直標籤。請注意,垂直選項卡包含在\v
中,因此對於任何垂直或水平白色空間,這意味着[\v\h]
與\p{Space}
相同,而不是\s
。
我現在要對字母數字更精確。爲了簡單起見,我要談論積極的匹配。應該很容易反轉邏輯以獲得負面匹配。
如果是「字母數字」,你的意思是字母或數字,你應該使用正是這個意思的屬性。 \pL
是\p{Letter}
的簡稱,可能涵蓋那些。所有字母都是字母,但是字符,它們是\p{Alphabetic}
,但不是\p{Letter}
,如羅馬數字,圓圈字母和各種變音符號。
對於數字,問題是否意味着只包含數字,還是其他數字都可以。 \pN
是\p{Number}
的簡稱,但包含大量的非數字。 \d
是\p{Nd}
的簡寫,而\p{Decimal_Number}
又是簡寫,儘管\p{Digit}
也可以正常工作。不是數字的數字包括羅馬數字,粗俗分數,上標數字和圓圈數字。
從Perl 5開始。11,除了0,\p{POSIX_Alpha}
只有字母和\p{POSIX_Alnum}
兩者,你可以使用\p{POSIX_Digit}
等屬性。還有一個\p{POSIX_Space}
與該版本或更好,涵蓋字符9-13加上32 只有,完全忽略了其他20個其他空白字符後來。
在此之前,仍然可以通過使用前瞻斷言來限制匹配爲ASCII範圍,使用/(?=\p{ASCII})[\p{Alpha}\p{Digit}]/
來限制匹配,儘管將字符限制爲7位是非常後千年。
我可能會讓他們使用羅馬數字,但不是特殊的變音符號,所以會使用/[\p{Letter}\p{Digit}]/
,如果您願意,可以將其縮短爲/[\pL\d]/
。
現在您將空白添加到\s
或稍寬的\p{Space}
,給出/[\p{Letter}\p{Digit}\p{Space}]/
。我也會以這種形式離開它,因爲我認爲你的意思更清晰。
爲了否定這一點,您可能會認爲以!
作爲前綴,但這並不完全相同,因爲空字符串會匹配。所以你應該在字符類的開頭加上一個字符來補充該字符集,使其成爲/[^\p{Letter}\p{Digit}\p{Space}]/
。
你可以不只需扳動意義上的\p
到\P
,而不是你可以用一個單一屬性的方式,因爲/[\P{Letter}\P{Digit}\P{Space}]/
會碰到一些非數字字母字符,(白)空格字符都是非數字,數字字符是nonspaces等
儘管如此,仍然沒有理由使用/i
。
[^\p{Alnum}\d ] # NOT alnum or space
- 1. 正則表達式匹配字母數字,非字母數字和空格
- 2. 正則表達式的Java非字母數字字符匹配
- 3. 與非字母數字字符匹配的正則表達式
- 4. C#正則表達式匹配15個字符,一個空格,字母數字
- 5. 正則表達式匹配無字符字符一個空格
- 6. 正則表達式匹配一個字母字母和數字
- 7. Perl正則表達式正則表達式匹配字符串除外,不匹配字符串
- 8. 正則表達式匹配一個空格的單個字符
- 9. 正則表達式非匹配的數字和字母
- 10. 正則表達式匹配字母數字字符和符號(&)
- 11. 正則表達式匹配未知字母數字字符數
- 12. Perl正則表達式匹配字母數字
- 13. .net正則表達式,用於除空格以外的所有不可見的非字母數字字符
- 14. 字母數字,連字符和空格的正則表達式
- 15. 正則表達式匹配除字母數字字符或連字符之外的任何字符
- 16. 創建正則表達式模式以匹配空格分隔的字符串
- 17. 正則表達式(php) - 匹配非字母數字字符的塊
- 18. 正則表達式匹配包含非字母數字字符的單詞
- 19. 正則表達式匹配,除非一個字符存在?
- 20. perl正則表達式數字匹配
- 21. Perl正則表達式匹配數字
- 22. php正則表達式匹配除數字以外的任何單詞字符
- 23. 正則表達式:匹配一個非數字字符BESIDES某個字符
- 24. 在perl中匹配空格和非字符的正則表達式
- 25. 正則表達式匹配非空格字符
- 26. ruby正則表達式匹配除特定字符以外的任何字符
- 27. 如何使用正則表達式來匹配字母字符?
- 28. Java正則表達式:匹配一個字符後跟空格?
- 29. 正則表達式匹配至少一個字符或空格
- 30. 正則表達式匹配除字符
請注意,這與非WORD字符匹配,但Joe說他想匹配非ALPHANUMERIC字符。 '\ w'包括(和'\ W'不包括)至少一個非字母數字,'_'。你會希望使用'/ [^ a-z0-9 \ s]/i'來排除字母和數字。假設你不關心重音字符等,這會打開一大堆其他的蠕蟲。 – Porculus 2010-10-20 01:43:40
你不需要'/ i'修飾符 - '/ w'已經不區分大小寫。 – 2010-10-20 06:35:43