我想從字符串中除去某些非字母數字字符,但某些字符除外。如何刪除任何非字母數字字符?
StringUtils.replacePattern(input, "\\p{Alnum}", "");
如何我還可以排除那些特定的字符,如.-;
?
我想從字符串中除去某些非字母數字字符,但某些字符除外。如何刪除任何非字母數字字符?
StringUtils.replacePattern(input, "\\p{Alnum}", "");
如何我還可以排除那些特定的字符,如.-;
?
使用不操作^
:
[^a-zA-Z0-9.\-;]+
這意味着 「匹配究竟是不是這些字符」。所以:
StringUtils.replacePattern(input, "[^a-zA-Z0-9.\\-;]+", "");
不要忘記正確逃生需要轉義字符:您需要使用兩個反斜槓\\
因爲你的正則表達式是Java字符串。
所以當有多個字符時,我不得不轉義任何字符:'[^ a-zA-Z0-9。\\ - \\ @ \\ _] +'等等?沒有更優雅的方式嗎? – membersound 2015-02-23 16:29:17
是的,你不能逃避那些不需要被轉義的東西,比如'@'和'_',或者你可以把'\ Q'和'\ E'放在相關的字符周圍來逃避它們:'' 「[^ a-zA-Z0-9。\\ Q - @ _ \\ E] +」' – 2015-02-23 16:34:20
你的意思是像StringUtils.replacePattern(input, "[^a-z\.\-]+", "");
- 即使我不確切是否StringUtils使用特殊的RegEx語法。
你可以否定你的表達;
\p{Alnum}
通過將其放置在一個消極的性格類:
[^\p{Alnum}]
,將匹配任何非字母數字字符,然後你可以取代那些""
。如果你想允許其他字符你可以把它們添加到字符類,例如:
[^\p{Alnum}\s]
不會匹配空格字符(\s
)。
如果你在哪裏更換
[^\p{Alnum}.;-]
與""
,這些字符也將被允許:.
,;
或-
。
當您將Q..E換行時, – membersound 2015-02-24 08:07:38
StringUtils使用Java的標準Pattern
類。如果你不希望導入Apache的圖書館,並希望它跑得快一點(因爲它沒有它的每次使用編譯正則表達式),你可以這樣做:
private static final Pattern NO_ODD_CHARACTERS = Pattern.compile("[^a-zA-Z0-9.\\-;]+");
...
String cleaned = NO_ODD_CHARACTERS.matcher(input).replaceAll("");
http://docs.oracle。 com/javase/7/docs/api/java/util/regex/Pattern.html – 2015-02-23 16:19:32
你還需要支持unicode字符嗎? – anubhava 2015-02-23 16:42:56