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

标签 java regex

我想研究一种正则表达式,如果一个字符串在一个单词前后有相同数量的星号,它就可以计算出来。

也就是说左侧和右侧的星号数量相同。我想出了 \*+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 组中以反向引用它们以在单词末尾进行匹配,并且只有找到完全相同数量的星号才能成功匹配。

  • (?<!\*)(?!\*) --> 否定前瞻确保它不会在较大的字符串中进行部分匹配,并且只会找到前面或后面没有星号字符的匹配项。

Live Demo

关于java - 正则表达式:单词前后的符号应具有相同的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53783082/

相关文章:

java - 比较 textview 和 JSONArray 中的值

java - 如何在 Android 中最好地存储和修改分类数据

java - 修复了 ScrollView 下方的按钮不显示的问题

java - URL.openStream 很慢

java - 为什么我的方法不适用于正则表达式?

javascript - 正则表达式以任何顺序匹配多个模式

regex - Excel VBA 使用正则表达式查找和屏蔽 PAN 数据以实现 PCI DSS 合规性

javascript - 使用正则表达式验证电话号码不起作用

java - 我可以将 <option> 中的值作为 JSP 中的整数绑定(bind)到对象字段吗?

ruby - 将字符串拆分为最大字符数的 block 而不打断单词