我有一个为Java制作的正则表达式,它将搜索单词:
virtue
virtues
VIRTUE
VIRTUES
代码行在这里:
Pattern p = Pattern.compile("\\bvirtue[s']?\\b", Pattern.CASE_INSENSITIVE);
但是,我需要它包含尾随字符。例如:
virtue's or VIRTUE'S
有人能告诉我尾随角色需要什么吗?
答案 0 :(得分:3)
您可以尝试以下正则表达式:
Path
此外,如果您打算经常使用正则表达式,建议使用常量以避免每次重新编译它,例如:
(?i)\bvirtue('?s)?\b
输出:
private static final Pattern REGEX_PATTERN =
Pattern.compile("(?i)\\bvirtue('?s)?\\b");
public static void main(String[] args) {
String input = "virtue\nvirtues\nVIRTUE\nVIRTUES\nvirtue's or VIRTUE'S";
Matcher matcher = REGEX_PATTERN.matcher(input);
while (matcher.find()) {
System.out.println(matcher.group());
}
}
答案 1 :(得分:1)
您的正则表达式与virtue'
或virtues
匹配,但不匹配virtue's
,这是因为您有一个可能的字符列表,并且您最多只能使用一次。
可能你想要这个:
/virtue'?s?/i
答案 2 :(得分:1)
你几乎得到了它。只需在字符类
之前的s?
之后添加?
即可
你的新模式应该是
Pattern p = Pattern.compile("\\bvirtue(s|'s)?\\b", Pattern.CASE_INSENSITIVE);
<强>输出强>
virtue
virtues
VIRTUE
VIRTUES
virtue's
VIRTUE'S
答案 3 :(得分:1)
您可以尝试以下正则表达式:
(?i)\bvirtue'?s?\b
此外,如果您打算经常使用正则表达式,建议使用常量以避免每次重新编译它,例如:
private static final Pattern REGEX_PATTERN =
Pattern.compile("(?i)\\bvirtue'?s?\\b");
public static void main(String[] args) {
String input = "virtue\nvirtues\nVIRTUE\nVIRTUES\nvirtue's or VIRTUE'S";
Matcher matcher = REGEX_PATTERN.matcher(input);
while (matcher.find()) {
System.out.println(matcher.group());
}
}
输出:
virtue
virtues
VIRTUE
VIRTUES
virtue's
VIRTUE'S
答案 4 :(得分:0)
使用括号以group匹配,尝试使用:
Pattern p = Pattern.compile("\\b(virtue[s']?)\\b", Pattern.CASE_INSENSITIVE);