我是正则表达式的新手,我现在正在学习它。我有这样的要求:
任何String都以#newline#开头,并以#newline#结尾。在这两个单词之间,可以有(0或更多空格)或(0或更多#newline#)。
下面是一个例子:
#newline# #newline# #newline##newline# #newline##newline##newline#.
如何为此做正则表达式?
我试过这个,但没有工作
^#newline#|(\s+#newline#)|#newline#|#newline#$
答案 0 :(得分:3)
您的^#newline#|(\s+#newline#)|#newline#|#newline#$
匹配字符串开头的#newline#
(^#newline#
),或者跟随#newline#
((\s+#newline#)
)的1 +空格,或者#newline#
,或者(这与以前的#newline#
)#newline#
#newline#$
^#newline#(?:\s*#newline#)*$
之前的#newline#
^#newline#(?:\s*#newline#)+$
^
的所有情况相匹配。
您可以将这些字符串与
匹配^
或(如果字符串中至少应出现2次#newline#
)
(?:\s*#newline#)*
请参阅regex demo。
*
- 字符串开头+
- 文字字符串\s*
- 零(注意:将#newline#
替换为$
将需要至少1)或更多序列
String s = "#newline# #newline# #newline##newline# #newline##newline##newline#";
System.out.println(s.matches("#newline#(?:\\s*#newline#)+"));
// => true
- 0+ whitespaces matches()
- 文字子字符串^
- 字符串结束。$
注意:在{{1}}内,表达式已经锚定,{{1}}和{{1}}可以删除。
答案 1 :(得分:2)
据我所知,这应该是:
^#newline#(\s|#newline#)*#newline#$
这与您的示例字符串不匹配,因为它不以#newline#
开头没有^,而$匹配子字符串。
查看http://www.regexplanet.com/以使用正则表达式。
答案 2 :(得分:1)
请使用模式并匹配类来识别。 您可以在运行时提供patternString字符串 patternString = “换行”;
public void findtheMatch(String patternString)
{
String text ="#newline# #newline# #newline##newline# #newline##newline##newline# ";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(text);
while(matcher.find()) {
System.out.println("found: " + matcher.group(1));
}
}
答案 3 :(得分:0)
你也可以试试这个:
#newline#[\s\S]+#newline#
它说,匹配以#newline#
开头的任何内容,后跟任何空白或非空白字符组合,以#newline#
结尾。