用正则表达式匹配剩余的
Matching leftover with regex
我正在尝试用正则表达式匹配任何不是先前匹配项的内容。
我有以下正则表达式:
(?<return>return)|(?<other>(?![ \n]).*?(?=(?:[\s\n]|$)))
如果我在以下字符串上使用它,我会得到 return
组的一个匹配项
return
但是在下面的字符串中我得到了 other
组:
return
(注意 return 之前的 space)。
other 的正则表达式不应匹配任何 spaces(或新行)但是(由于 (?![ \n])
.
因此,例如,假设我有以下字符串:return abc 123
。然后我想使用上面的正则表达式进行 3 场比赛:一场在 return
组中,其中包含“return”,另外两场在 other
组中,其中包含“abc”和“123” “
我似乎无法弄清楚为什么会这样。有人对此有解释吗?我该如何解决这个问题?
您可能会使用
(?<return>return)|(?<other>\S+)
匹配
(?<return>return)
- 组“return”:return
子串
|
- 或
(?<other>\S+)
- “其他”组:一个或多个 non-whitespace 个字符。
如果 return
可以出现在 non-whitespace 块中,您可能希望从第二部分中排除 return
:(?<return>return)|(?<other>(?:(?!return)\S)+)
。参见 demo。
如果左边必须有空格或字符串开头,右边必须有空格或字符串结尾,您可以添加空格边界:
(?<!\S)(?:(?<return>return)|(?<other>\S+))(?!\S)
我正在尝试用正则表达式匹配任何不是先前匹配项的内容。
我有以下正则表达式:
(?<return>return)|(?<other>(?![ \n]).*?(?=(?:[\s\n]|$)))
如果我在以下字符串上使用它,我会得到 return
组的一个匹配项
return
但是在下面的字符串中我得到了 other
组:
return
(注意 return 之前的 space)。
other 的正则表达式不应匹配任何 spaces(或新行)但是(由于 (?![ \n])
.
因此,例如,假设我有以下字符串:return abc 123
。然后我想使用上面的正则表达式进行 3 场比赛:一场在 return
组中,其中包含“return”,另外两场在 other
组中,其中包含“abc”和“123” “
我似乎无法弄清楚为什么会这样。有人对此有解释吗?我该如何解决这个问题?
您可能会使用
(?<return>return)|(?<other>\S+)
匹配
(?<return>return)
- 组“return”:return
子串|
- 或(?<other>\S+)
- “其他”组:一个或多个 non-whitespace 个字符。
如果 return
可以出现在 non-whitespace 块中,您可能希望从第二部分中排除 return
:(?<return>return)|(?<other>(?:(?!return)\S)+)
。参见 demo。
如果左边必须有空格或字符串开头,右边必须有空格或字符串结尾,您可以添加空格边界:
(?<!\S)(?:(?<return>return)|(?<other>\S+))(?!\S)