我想研究一种正则表达式,如果一个字符串在一个单词前后有相同数量的星号,它就可以计算出来。
也就是说左侧和右侧的星号数量相同。我想出了 \*+T\*+
,其中 T 是任何非星号的词(针对这个问题进行了简化)。例如,这也算在“****hello****”中的 ****hello* 中,这是我不想要的。它应该只找到 hello, *hello* , **hello**, ***hello***, ****hello****
in ****你好****
在 Java 中有没有一种方法,或者一般来说,可以多次使用可变长度,类似于 \*{x}T\*{x}
。其中“*”两边的末尾和开头连接的*数量相同?
最佳答案
你可以使用这个正则表达式,
(?<!\*)(\**)\b\w+\b(\1)(?!\*)
这将只匹配像 hello
这样的词或 *hello*
或 ***hello***
但不匹配*hello***
解释:
-
\b\w+\b
--> 这部分使它能够匹配像hello
这样的词 (\**)
--> 这部分捕获零个或多个星号并将它们捕获到第 1 组中以反向引用它们以在单词末尾进行匹配,并且只有找到完全相同数量的星号才能成功匹配。(?<!\*)
和(?!\*)
--> 否定前瞻确保它不会在较大的字符串中进行部分匹配,并且只会找到前面或后面没有星号字符的匹配项。
关于java - 正则表达式:单词前后的符号应具有相同的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53783082/