2013-04-20 166 views
1

我正在查找正則表達式模式,以查明是否有任何4個特定字符存在於字符串變量中:撇號(')破折號( - )em破折號( - )顛倒問號(¿)查找字符串中的特定特殊字符

我試過包含字符串的方法,但使用的是我得比較4倍:

abc.contains("'")||abc.contains("-")||abc.contains("—")||abc.contains("¿") 

是否有使用正則表達式更好的辦法?因爲我必須爲許多變量實現相同的功能。

我也可以知道哪個角色是以最短的方式找到的?

+3

請注意,這實際上並不是連字符,而是連字符。連字符: - ,減號: - ,破折號: - ,破折號: - 。 – 2013-04-20 12:53:09

+0

我可否也知道哪個角色是以最短的方式找到的? – Keethan 2013-04-20 13:39:54

回答

6

你可以試試這個方法

if (abc.matches(".*?['\\-—¿].*")) 

如果將接受任何字符串匹配序列:

  • .* - 任意字符零個或多個(旁邊新線)
  • ['\\-—¿] - 一個'-¿-是正則表達字符類中的特殊字符 - [...] - 所以我需要用\逃避它,對於Java有寫爲"\\"或放置後立即[或之前]
  • .* - 再次零個或多個任意字符(旁邊新線)
+0

謝謝..它似乎是工作! – Keethan 2013-04-20 13:01:26

+0

爲什麼'。*'?他們只是在這裏減緩正則表達式......'abc.matches(「[-'-¿]」)'顯然夠用了(連字符也可以作爲字符類的第一個或最後一個字符,不得不逃脫它)。 – Loamhoof 2013-04-20 13:58:40

+0

@Loamhoof'matches'只有*整個*字符串匹配正則表達式纔會返回true,所以'。*'是必不可少的。確實,將連字符作爲字符類的第一個或最後一個元素也會使其成爲字面值,但我更願意將其忽略掉,因爲如果其他人沒有正則表達式知識會嘗試向字符添加新字符,它將防止將來發生錯誤類。 – Pshemo 2013-04-20 14:08:46