由于换行符而导致正则表达式中断(\ n)

时间:2013-09-13 17:17:45

标签: java regex

我有一个正则表达式,它使用"'''.*?'''|'.*?'"模式在tripple引号(''')和单引号(')之间查找文本。当回车符添加到输入String时,正则表达式模式无法读取到三重引号的末尾。任何想法如何改变正则表达式读取到三重刻度的结尾而不是在\ n中断? quoteMatcher.end()返回值2,因此下面的失败案例返回''''''

使用:

'''<html><head></head></html>'''

失败:

用户输入值:

   '''<html>
    <head></head>
    </html>'''

Java表示:

'''<html>\n<head></head>\n</html>'''

解析逻辑:

public static final Pattern QUOTE_PATTERN = Pattern.compile("'''.*?'''|'.*?'");


 Matcher quoteMatcher = QUOTE_PATTERN.matcher(value);
        int normalPos = 0, length = value.length();
        while (normalPos < length && quoteMatcher.find()) {
          int quotePos = quoteMatcher.start(), quoteEnd = quoteMatcher.end();
          if (normalPos < quotePos) {
            copyBuilder.append(stripHTML(value.substring(normalPos, quotePos)));
          }
          //quoteEnd fails to read to the end due to \n
          copyBuilder.append(value.substring(quotePos, quoteEnd));
          normalPos = quoteEnd;
        }
    if (normalPos < length) copyBuilder.append(stripHTML(value.substring(normalPos)));

1 个答案:

答案 0 :(得分:3)

只需使用Pattern.DOTALL修饰符,.也匹配换行符。

public static final Pattern QUOTE_PATTERN = Pattern.compile("'''.*?'''|'.*?'", Pattern.DOTALL);