正则表达式:单词前后的符号应具有相同的数量

时间:2018-12-14 15:59:01

标签: java regex

我想研究一种正则表达式,该表达式可以确定一个字符串在一个单词之前和之后是否具有相同数量的星号。

也就是说,左侧的星号与右侧的星号相同。我想出了\*+T\*+,其中T是任何非星号的单词(对此问题进行了简化)。例如,这也算在“ **** hello ****”中的“ **** hello *”中,我不希望这样。它只能在hello, *hello* , **hello**, ***hello***, ****hello****

中找到****hello****

在Java中,是否有一种方法可以使用\*{x}T\*{x}的行中多次使用可变长度的长度。两端的“ *”在结尾处和开头都具有相同数量的*?

1 个答案:

答案 0 :(得分:4)

您可以使用此正则表达式,

GeneratorExit

这将仅匹配(?<!\*)(\**)\b\w+\b(\1)(?!\*) hello*hello*之类的单词,但不匹配***hello***

说明:

  • *hello***->通过此部分,它可以与\b\w+\b之类的单词匹配
  • hello->此部分捕获零个或多个星号,并将其捕获到第1组中以引用它们以匹配单词的末尾,并且仅在找到完全相同的星号时,它获得成功的比赛。

  • (\**)(?<!\*)->负向查找可确保它不会在较大的字符串中进行部分匹配,而只会查找没有星号字符开头或后继的匹配项

Live Demo