为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 Java 正则表达式查找给定字母的单词

如何使用 Java 正则表达式查找给定字母的单词

梦里花落0921 2023-02-23 14:45:49
public class Homework {  public static void main(String[] args) {    String words[] = { "Abendessen", "Affe", "Affen", "aber", "anders", "Attacke", "arrangieren", "Art", "Asien",            "Bund", "Arten", "Biene", "Abend", "baden", "suchen", "A1rten", "Abend-Essen" };    Pattern pattern = Pattern.compile("[aA][a-z[n]+a-z]*");    for (int i = 0; i < words.length; i++) {      Matcher matcher = pattern.matcher(words[i]);      if (matcher.find()) {        System.out.println("OK: " + words[i]);      }    }  }}过滤以 a 或 A 开头并包含 n 的单词。这些单词可能仅由字母组成,并且只有以第二个字母开头的小写字母。这些词应该匹配:Abendessen, Affen, anders, arrangieren, Asien, Arten, Abend我已经粗心地尝试了上面的这个正则表达式,并且认为那也是错误的。
查看完整描述

1 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

您当前的模式[aA][a-z[n]+a-z]*如下:

字符类[aA],字符类[a-z[n]+。然后后面跟着a-z]*which 将匹配a-,z]重复 0+ 次。

例如匹配Abendessena-z]

你可能做的是用 a 或 A 开始匹配并重复 2 次[a-z]0+ 次并确保n中间有一个 a:

\b[aA][a-z]*n[a-z]*\b

解释

  • \b单词边界

  • [aA]匹配 a 或 A

  • [a-z]*匹配 0+ 次 az

  • n匹配n

  • [a-z]*匹配 0+ 次 az

  • \b单词边界

您也可以使用锚点^$断言字符串的开头和结尾而不是\b

正则表达式演示


查看完整回答
反对 回复 2023-02-23
  • 1 回答
  • 0 关注
  • 91 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信