匹配具有特定反引用组合的单词

Jag*_*ram 2 java regex pattern-matching

我需要使用正则表达式匹配一个单词,它位于反引号/反引号之间,最多有1和2个反引号.

匹配案例

  1. 单词应以一个或两个反引号开头,以N反引号结束
  2. 单词应该从N个反引号开始,以一个或两个反引号结束

不应该匹配

  1. Word以三个以上的反引号开头和结尾

I `need` to match a ``word`` from a ```sentence``
Which `lies`` between `backquotes```` and this ``should```` also match
and ```more``` than ```three```````` quotes ```````not```  matched
Run Code Online (Sandbox Code Playgroud)

火柴:

  1. 需要
  2. 反引号
  3. 应该

尝试

    Pattern PATTERN = Pattern.compile("`{1,2}\\w+|\\w+`{1,2}", Pattern.DOTALL);
Run Code Online (Sandbox Code Playgroud)

Wik*_*żew 5

你可以用

(?<!`)`{1,2}\b(?!`)(.*?)\b`+
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式演示.获取Group 1值.

细节:

  • (?<!`) - 当前位置不应该以a开头 `
  • `{1,2}- `匹配1或2
  • \b - 单词边界要求下一个char为单词char
  • (?!`) - 1或2次反击后的下一个角色不能成为backtrick
  • (.*?)- 匹配并捕获任何0+字符(考虑使用Pattern.DOTALL匹配跨行)
  • \b - 一个单词边界,下一个反引号应该以一个单词char开头
  • `+ - 一个或多个反引号.

请参阅Java演示:

String s = "I `need` to match a ``word`` from a ```sentence`` Which `lies`` between `backquotes```` and this ``should```` also match and ```more``` than ```three```````` quotes ```````not```  matched";
Pattern pattern = Pattern.compile("(?<!`)`{1,2}\\b(?!`)(.*?)\\b`+");
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
    System.out.println(matcher.group(1)); 
} 
Run Code Online (Sandbox Code Playgroud)