繁体   English   中英

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

[英]Regular expression matching “dictionary words”

我是Java用户,但是对正则表达式不熟悉。

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

一个例子...我想捕捉所有可能出现在字典中的单词...所以,我只想要带有AZ AZ字符,连字符(例如:中间人)和撇号(例如I'll或Tiffany的撇号)。

有效词:

  • "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());

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

  • 在表达式后添加一个+ ,以表示“这些字符中的一个或多个”:
  • \\转义连字符(或放在最后)。
  • 删除那些&字符:

这是代码:

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);

(不产生任何输出。)

这应该工作:

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

但是“ -word”和“ word-”无效。 因此,您可以使用以下模式:

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

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

如果您不希望连续使用“'”或“-”,则可以使用上述正则表达式。 它将使您准确匹配您的文本。 它接受中间人asd'asdasd'asd

它拒绝跟随字符串man--in--midle asdasd''asd

嗨,Aloob,请检查一下,比特有点长,可能是它的较短版本,仍然...

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM