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

时间:2016-08-01 12:29:14

标签: java regex

我是正则表达式的新手,我现在正在学习它。我有这样的要求:

任何String都以#newline#开头,并以#newline#结尾。在这两个单词之间,可以有(0或更多空格)或(0或更多#newline#)。

下面是一个例子:

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

如何为此做正则表达式?

我试过这个,但没有工作

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

4 个答案:

答案 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() - 文字子字符串
  • ^ - 字符串结束。

Java demo

$

注意:在{{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#结尾。