正则表达式匹配“字典单词”

时间:2011-10-13 09:47:26

标签: java regex

我是Java用户,但我是正则表达式的新手。

我只想要一个微小的表达式,给定一个单词(我们假设字符串只有一个单词),用布尔值回答,告诉单词是否有效。

一个例子......我想要抓住所有在字典中都是合理的单词...所以,我只想要带有字母的字符来自AZ AZ,一个连字符(例如:中间人) )和撇号(就像我或蒂芙尼的那样)。

有效的话:

  • "food"
  • "RocKet"
  • "man-in-the-middle"
  • "kahsdkjhsakdhakjsd"
  • "JESUS"

无效字词:

  • "gipsy76"
  • "www.google.com"
  • "me@gmail.com"
  • "745474"
  • "+-x/"

我使用此代码,但它没有给出正确的答案:

Pattern p = Pattern.compile("[A-Za-z&-&']");
Matcher m = p.matcher(s);
System.out.println(m.matches());

我的正则表达式出了什么问题?

5 个答案:

答案 0 :(得分:4)

  • 在表达式后添加+以说出“其中一个或多个字符”:
  • 使用\(或将其放在最后一个位置)转义连字符。
  • 删除&个字符:

以下是代码:

Pattern p = Pattern.compile("[A-Za-z'-]+");
Matcher m = p.matcher(s);
System.out.println(m.matches());

完成测试:

String[] ok = {"food","RocKet","man-in-the-middle","kahsdkjhsakdhakjsd","JESUS"};
String[] notOk = {"gipsy76", "www.google.com", "me@gmail.com", "745474","+-x/" };

Pattern p = Pattern.compile("[A-Za-z'-]+");

for (String shouldMatch : ok)
    if (!p.matcher(shouldMatch).matches())
        System.out.println("Error on: " + shouldMatch);

for (String shouldNotMatch : notOk)
    if (p.matcher(shouldNotMatch).matches())
        System.out.println("Error on: " + shouldNotMatch);

(不产生输出。)

答案 1 :(得分:1)

这应该有效:

"[A-Za-z'-]+"

答案 2 :(得分:0)

但" -word"和"字 - "无效。所以你可以使用这种模式:

WORD_EXP = "^[A-Za-z]+(-[A-Za-z]+)*$"

答案 3 :(得分:0)

  

正则表达式 - / ^([a-zA-Z] *(' | - )?[a-zA-Z] +)* /

如果你不想要连续的"'"你可以使用上面的正则表达式或" - "。 它会为您准确匹配您的文本。 它接受    人在这方面的中间人    ASD' asdasd' ASD

拒绝以下字符串 男人 - 在 - midle asdasd'' ASD

答案 4 :(得分:-1)

嗨Aloob请用这个查一下,有点冗长,可能会有更短的版本,还是......

[A-z]*||[[A-z]*[-]*]*||[[A-z]*[-]*[']*]*