我对正则表达式很陌生,我现在正在学习。我有这样的需求:
任何字符串都以#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#
- 文字子串
$
- 字符串结尾。
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/