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

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

在Java中,或者通常来说,是否有一种方法可以使用可变数量的长度不止一次,类似于\*{x}T\*{x}的用法。在哪两个“ *”在结尾和开头具有相同数量的*?

最佳答案

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

(?<!\*)(\**)\b\w+\b(\1)(?!\*)


这将仅匹配hello*hello****hello***之类的单词,但不匹配*hello***

说明:


\b\w+\b->此部分使其能够匹配hello之类的单词
(\**)->此部分捕获零个或多个星号,并将其捕获到组1中,以在单词末尾反向引用它们以进行匹配,并且仅当找到完全相同的星号时,它才会成功匹配。
(?<!\*)(?!\*)->负向查找可确保它不会在较大的字符串中进行部分匹配,而只会查找没有星号字符前后的匹配项。


Live Demo

10-05 20:39
查看更多