![单词查找和替换“?{1,2}”出现意外行为。匹配长字符串](https://linux22.com/image/1519080/%E5%8D%95%E8%AF%8D%E6%9F%A5%E6%89%BE%E5%92%8C%E6%9B%BF%E6%8D%A2%E2%80%9C%3F%7B1%2C2%7D%E2%80%9D%E5%87%BA%E7%8E%B0%E6%84%8F%E5%A4%96%E8%A1%8C%E4%B8%BA%E3%80%82%E5%8C%B9%E9%85%8D%E9%95%BF%E5%AD%97%E7%AC%A6%E4%B8%B2.png)
问题与启用通配符(准正则表达式)的单词查找和替换有关。
根据这个微软页面:
- ? 代表任意单个字符(如正则表达式中的 .)
- {n,m} 表示 n 和 m 之间定义的字符数。
但是,我得到了以下结果
源字符串:啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
查找内容:
b{1,2}a
结果:abbbbb工商管理硕士啊啊啊
(预期的)
查找内容:
??a
结果:abbbbb工商管理硕士啊啊啊
(预期的)
找到什么:
?{1,2}a
结果:哎呀哎呀啊啊啊
最后一个到底发生了什么?它似乎表现得像*
答案1
从您提供的网页:
{n,m} - 前一个出现的次数从 n 到 m特点或者表达
和
()-表达
和
? -任意单个字符,包括空格和标点符号
因此我认为“?”在这种情况下不被视为“字符”(因为“?”是“任何单个字符”),但是当你用括号将其括起来时它就变成了表达式并且它可以起作用。
因此这里正确的正则表达式是: (?){1,2}a