【问题标题】:Split a string in java using regex使用正则表达式在java中拆分字符串
【发布时间】:2012-03-14 11:22:33
【问题描述】:

我正在尝试使用正则表达式“A.*B”拆分字符串,它可以很好地检索“A”和“B”之间的字符串。但是点“。”不包括换行符 \n,\r。 您能否指导我如何实现这一目标?

谢谢


谢谢大家。 Pattern.DOTALL 就像一个魅力。

我还有一个与此相关的问题。如果我需要提取 'A' 和 'B' 之间的所有字符串(基本上与上面的正则表达式匹配),应该怎么做。

我尝试使用 matcher 类的 find() 和 group(),但是下面的模式似乎返回了整个字符串。

Pattern p = Pattern.compile("A.*B",Pattern.DOTALL);

【问题讨论】:

  • A[.\n\r]*B 工作吗?

标签: java regex split


【解决方案1】:

使用带有 MULTILINE 标志的 java.util.regex.Pattern:

import java.util.regex.Pattern;

Pattern pattern = Pattern.compile("A.*B", Pattern.MULTILINE);
pattern.split(string);

【讨论】:

    【解决方案2】:

    使用此选项编译正则表达式:Pattern regex = Pattern.compile("A.*B",Pattern.DOTALL)

    【讨论】:

      【解决方案3】:

      试试“A[.\\s]*B”

      或者您可以指定 DOTALL 开关,以便“。”将包括偶数行终止符。看看 Pattern 类的文档。

      【讨论】:

        【解决方案4】:

        看看 java.util.regex.Pattern.compile(String regex, int flags),尤其是。 DOTALL 标志

        【讨论】:

          【解决方案5】:

          我假设您为此使用 PatternMatcher 类。

          您是否尝试将MULTILINE 提供给您的Pattern.compile() 方法?

          Pattern.compile(regex, Pattern.MULTILINE)

          '.' = 任何字符(可能匹配也可能不匹配行终止符)

          http://docs.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html#lt

          【讨论】:

            【解决方案6】:

            尝试将你的正则表达式更改为"A(.|\\s)*B",这意味着A followed by any character(.) or any white character(\s) any number of times followed by B(在java代码中需要双倍的\s)。

            Java 中的正则表达式(结构、空格字符等)参考:http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html

            【讨论】:

              猜你喜欢
              • 2011-07-18
              • 1970-01-01
              • 2011-10-16
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多