gpt4 book ai didi

java - 如何使用\Q\E 通过 DOTALL 转义文字化 unicode 字符?

转载 作者:行者123 更新时间:2023-11-29 07:48:57 27 4
gpt4 key购买 nike

我有以下代码,正则表达式的指定输入导致下面的输出。但是,unicode 字符导致在 m.find() 上抛出异常。如果您删除文本中“Unicode”之前的 unicode 字符,一切正常。

所以,我尝试装饰我的正则表达式以使用\Q\E 转义/文学化任何 unicode 字符(不确定这是否是正确的方法或者我是否正确地做)。然而,它阻止了异常,但现在它在 m.find() 上不匹配。

如何正确转义此 unicode(和任何 unicode 字符)?

        String text = "Hi\n\nyo keep this here\n\n📱Unicode b4 keep all from here\n\nyo\ncut me:\n\nThis should be deleted";
Pattern PATTERN = Pattern.compile("^\\Q(.+?)\\nyo(?:(?!cut me:|\\nyo).)*cut me:\\E",
Pattern.DOTALL);
Matcher m = PATTERN.matcher(text);
if (m.find()) {
text = m.group(1);
System.out.println(text);
}

输出:

Hi

yo keep this here

Unicode b4 keep all from here

最佳答案

使用 \Q\E 实际上会改变你的正则表达式的行为:正如你写的那样,它会完全匹配那个序列:

(.+?)\\nyo(?:(?!cut me:|\\nyo).)*cut me:

也就是说,它实际上是在尝试找到一个括号,然后是一个乱七八糟的,然后是一个+,等等。 ..


澄清一点:

final Pattern PATTERN = Pattern.compile("^\\Q(.+?)\\nyo(?:(?!cut me:|\\nyo).)*cut me:\\E", Pattern.DOTALL);
final Matcher m = PATTERN.matcher("(.+?)\\nyo(?:(?!cut me:|\\nyo).)*cut me:");
System.out.println(m.match()); // true

关于java - 如何使用\Q\E 通过 DOTALL 转义文字化 unicode 字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22849827/

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