gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 23:35:20 26 4
gpt4 key购买 nike

我有一个正则表达式,它使用 "'''.*?'''|'.*?'" 模式来查找三重引号 (''') 和单引号之间的文本引号 (')。当回车符添加到输入字符串时,正则表达式模式无法读取到三引号的末尾。知道如何更改正则表达式以读取到三重刻度的末尾而不是在\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)));

最佳答案

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

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

关于java - 由于换行符 (\n) 导致正则表达式中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18791838/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com