java - 重复单词的正则表达式模式

标签 java regex

我对正则表达式很陌生,我现在正在学习。我有这样的需求:

任何字符串都以#newline# 开头,也以#newline# 结尾。在这两个词之间,可以有(0 个或多个空格)或(0 个或多个#newline#)。

下面是一个例子:

#newline#  #newline# #newline##newline# #newline##newline##newline#.

如何为此做正则表达式?

我试过了,但是不行

^#newline#|(\s+#newline#)|#newline#|#newline#$

最佳答案

您的 ^#newline#|(\s+#newline#)|#newline#|#newline#$ 匹配开头的 #newline#字符串 (^#newline#),或 1+ 个空格后跟 #newline# ((\s+#newline#)),或 #newline#,或者(这永远不会匹配,因为前面捕获了 #newline# 的所有情况)结尾处的 #newline#字符串 (#newline#$)。

您可以将这些字符串与

匹配
^#newline#(?:\s*#newline#)*$

或(如果字符串中至少出现 2 次 #newline#)

^#newline#(?:\s*#newline#)+$
                          ^

参见 regex demo .

  • ^ - 字符串的开始
  • #newline# - 文字字符串
  • (?:\s*#newline#)* - 零(注意:将 * 替换为 + 将需要至少 1) 或更多序列
    • \s* - 0+ 个空格
    • #newline# - 文字子串
  • $ - 字符串结尾。

Java demo :

String s = "#newline#  #newline# #newline##newline# #newline##newline##newline#";
System.out.println(s.matches("#newline#(?:\\s*#newline#)+"));
// => true

注意:在matches()中,表达式已经被锚定,^$可以移除。

关于java - 重复单词的正则表达式模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38698936/

相关文章:

java - 转换 map 值

java - TestNG 未通过编程调用找到测试

c# - 需要使用 Regex 删除两个标签之间的空格

java - 如何从 Java 执行 Java?

java - 运行程序时如何重置 TestNG 中测试方法组的值

java - Selenium Webdriver - 如何从非典型下拉列表中选择选项

javascript - 使用 JavaScript 对 HTML 属性进行排序

c# - 编写正则表达式以搜索子字符串 C#

java - 正则表达式 : How to escape []?

javascript - 根据另一个数组中的条目拆分数组