【问题标题】:Java regex find method returns false for matching roman numeralsJava regex find 方法返回 false 以匹配罗马数字
【发布时间】:2018-09-28 23:04:59
【问题描述】:

我正在尝试在 java 中创建一个正则表达式模式来匹配具有某些属性的列表文本。例如:

(i) hello stackoverflow

(iv) hello user

该列表可以匹配(i)i)。 我使用我对正则表达式的理解得出了一个模式,并在在线工具中测试了该版本,它返回了正确的结果。但是,当我在 java 中实现它时,模式匹配器为 find 方法返回 false。

这是伪代码:'

String text = "(i) hello";
String romanNumeralsRegex = "^(\\(|\\[)?((v|x)?i[xv]|(xv|v|x)?i+|(xv|v|x))((\\)|\\]|\\.))";
Pattern pattern = Pattern.compile(romanNumeralsRegex );
Matcher matcher = pattern.matcher(text);
System.out.println(matcher.find());

matcher.find() 方法返回 false。据我了解,匹配器应将group(0) 作为(i) 返回。我不知道我哪里出错了。在此处向社区请求帮助

提前致谢。

【问题讨论】:

  • matcher.find() 的输出对我来说返回 true
  • @RAZ_Muh_Taz 这很奇怪,因为它对我来说返回 false。

标签: java regex pattern-matching


【解决方案1】:

在我看来一切都是正确的,除了你需要在调用 Matcher#find 之后再调用 Matcher#group

if (matcher.find()) {
    System.out.println(matcher.group(0));
}

输出:

(i)

【讨论】:

  • 就像我说的 matcher.find() 返回 false。
  • 它为我返回true
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-30
  • 2023-03-31
  • 1970-01-01
相关资源
最近更新 更多