gpt4 book ai didi

java - 正则表达式与 & 符号不匹配

转载 作者:行者123 更新时间:2023-12-02 02:08:07 24 4
gpt4 key购买 nike

我正在尝试匹配以下正则表达式:

\b(?:mr|mrs|ms|miss|messrs|mmes|dr|prof|rev|sr|jr|&|and)\.?\b

换句话说,单词边界后跟上面的任何字符串(可选地后跟句点字符),然后是单词边界。

我试图在 Java 中匹配它,但与符号不匹配。例如:

Pattern p = Pattern.compile(
"\\b(?:mr|mrs|ms|miss|messrs|mmes|dr|prof|rev|sr|jr|&|and)\\.?\\b",
Pattern.CASE_INSENSITIVE);

String result = p.matcher("mr one and mrs.two and three & four").replaceAll(" ");

System.out.println("["+result+"]");

其输出为:[一二三和四]

我也在 regex101 上尝试过这个,并且 & 符号再次不匹配:https://regex101.com/r/klkmwl/1

转义 & 符号没有什么区别,我尝试使用十六进制转义序列 \x26 而不是 & 符号(如 this question 中的建议)。为什么这不匹配?

最佳答案

如果您的正则表达式位于单词字符之间,则它匹配&符号,例如三和四,参见this regex demo 。发生这种情况是因为非单词字符之前的 \b 要求单词字符紧接在其前面。另外,由于可选点后面有一个 \b,因此仅当左侧紧邻单词字符时,点和 & 符号才会匹配。

您需要重写模式,以便将单词边界应用于单词而不是符号:

Pattern p = Pattern.compile(
"(?:\\b(?:mr|mrs|ms|miss|messrs|mmes|dr|prof|rev|sr|jr|and)\\b|&)\\.?",
Pattern.CASE_INSENSITIVE);

请参阅regex demo online .

关于java - 正则表达式与 & 符号不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68097426/

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