为什么 (?:\s)\w{2}(?:\s) 不只匹配一个 2 个字母的子字符串,周围有空格而不是空格?

Why does (?:\s)\w{2}(?:\s) not match only a 2 letter sub string with spaces around it not the spaces as well?

我正在尝试制作一个正则表达式,该正则表达式匹配小于或等于 2 个字符的所有子字符串,并且在以太端带有 space。我做错了什么?

ex 我想要做的是让它匹配 %2q 但不匹配 123 而不是 space。

更新此 \b\w{2}\b 如果它也匹配一个字母子字符串并且没有忽略特殊字符,如 - 或 #。

你应该使用

(^|\s)\S{1,2}(?=\s)

由于不能使用后视,可以使用捕获组,如果替换文本,则可以使用 </code> 恢复捕获的部分。</p> <p>见<a href="https://regex101.com/r/xP0kZ4/1" rel="nofollow">regex demo here</a></p> <p>正则表达式细分:</p> <ul> <li><code>(^|\s) - 第 1 组 - 字符串开头或空格

  • \S{1,2} - 1 或 2 个非空白字符
  • (?=\s) - 检查 1 或 2 个非空白字符后是否有空白。如果不是,则失败。