正则表达式:匹配字符,其前面有反斜杠数量

时间:2019-02-14 14:36:59

标签: java regex

如果在此字符之前是事件量的反斜杠(或没有反斜杠),则我需要一个与某个字符匹配的RegEx。

例如:

*       #match the character *
\*      #no match
\\*     #match the character *
\\\*    #no match
\\\\*   #match the character *

我尝试了以下RegEx:(?<!\\)(?:\\\\)*\*,但它匹配整个序列(例如\\*),而不仅是字符*

这是我的游乐场:https://regex101.com/r/2HLpY0/1

1 个答案:

答案 0 :(得分:-1)

您的问题有点局限,我不知道您打算使用正则表达式的确切上下文。假设您实际上只想匹配一个由偶数或奇数个反斜杠以及一些内容组成的整个字符串,那么您可以使用以下模式:

(?<=\s|^)(?:\\{2})*(\*)(?=\s|$)

这仅与偶数个前导反斜杠匹配。我在下面使用正式的模式匹配器,因为它可以让我们优雅地处理找不到匹配项的情况。

String input = "Hello World! \\\\\\\\* more content here? \\\\*";
String pattern = "(?<=\\s|^)(?:\\\\{2})*(\\*)(?=\\s|$)";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(input);

boolean found = false;
while (m.find()) {
    found = true;
    System.out.println(m.group(1));
}
if (!found) {
    System.out.println("No match");
}

输出:

*
*
(two asterisks found in the input)

请注意,使用String#replaceAll并不像上面那样好,因为在不匹配的情况下它将返回原始输入字符串。