gpt4 book ai didi

java - 在java正则表达式中转义特殊字符(不引用)

转载 作者:行者123 更新时间:2023-12-01 15:46:29 30 4
gpt4 key购买 nike

我正在尝试将用户输入与比 java 正则表达式语法更简单的通配符进行匹配。假设有一个通配符 A。然后用户将输入输入字符串:

这个(是\一个$测试。

并将“test”与搜索字符串相匹配:

这个(是\a $ %A%。

我通过将搜索字符串中的通配符字符串替换为 (.+?) 来实现此目的,这样我就可以将通配符与普通正则表达式的捕获组进行匹配。但是,我仍然希望转义特殊字符。如果我使用引号,则正则表达式将不再起作用,因为具有正则表达式含义的字符 ((.+?)) 也会被引用:

String inputString  = "this ( is \\ a $ test."
String searchString = "this ( is \\ a $ %A%."
String regex = Pattern.quote(searchString);
//regex = "\\Qthis ( is \\ a $ %A%.\\E"
regex = regex.replaceFirst("%A%", "(.+?)");
//regex = "\\Qthis ( is \\ a $ (.+?).\\E"
Matcher matcher = Pattern.compile(regex).matcher(inputString); //no match

是否有一种内置方法可以真正转义特殊字符,而不是引用整个字符串?

最佳答案

您需要找到 %A%,引用它前面的所有内容、后面的所有内容,然后将其替换为匹配的正则表达式语法。

我不确定这个通配符的完整要求是什么,但如果它只能是%A%,它看起来像这样:

String searchString = "this ( is \\ a $ %A%.";
String extractorToken = "(.+?)";

int indexOfWildcard = searchString.indexOf("%A%");
String pattern = Pattern.quote(searchString.substring(0, indexOfWildcard)) +
extractorToken +
Pattern.quote(searchString.substring(indexOfWildcard + 3, searchString.length()));
Matcher matcher = Pattern.compile(pattern).matcher(inputString);

如果通配符可以有不同的形式,您可以使用正则表达式来定位通配符的位置,然后执行上述操作。

关于java - 在java正则表达式中转义特殊字符(不引用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6946049/

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