包含正则表达式的尾随字符

时间:2015-09-29 23:36:36

标签: java regex

我有一个为Java制作的正则表达式,它将搜索单词:

virtue
virtues
VIRTUE
VIRTUES

代码行在这里:

Pattern p = Pattern.compile("\\bvirtue[s']?\\b", Pattern.CASE_INSENSITIVE);

但是,我需要它包含尾随字符。例如:

virtue's or VIRTUE'S

有人能告诉我尾随角色需要什么吗?

5 个答案:

答案 0 :(得分:3)

您可以尝试以下正则表达式:

Path

regex

此外,如果您打算经常使用正则表达式,建议使用常量以避免每次重新编译它,例如:

(?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

regex

此外,如果您打算经常使用正则表达式,建议使用常量以避免每次重新编译它,例如:

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