正则表达式:具有空格字符的词的后面查找

3

我试图在joinon之间获取表名为course。两者之间可能有任何空格字符。

我尝试应用以下正则表达式,它返回了空格和表名course。我尝试使用(?<=join\s+)(\w+)(?=.*on),但问题是它说回顾需要为零宽度

(?<=join)\s+(\w+)(?=.*on)

left outer join      course c on s.id = c.id

https://regex101.com/r/bT9hG1/1

  • 我正在尝试在Sublime文本编辑器中查找和替换,并在表名前添加前缀。

1
仅供参考,错误信息不正确。我认为他们的意思是“固定宽度”,但也不完全正确。该消息继续说您不能在回顾中使用量词;这就是正确的部分(在PCRE中)。 - Alan Moore
有很多东西需要学习。信息很棒。会记住的。谢谢。 - Abdul Rehman
1个回答

3

由于Sublime文本编辑器使用PCRE正则表达式,您可以使用\K来重置匹配的信息:

(?<=join\s)\s*\K(\w+)\b(?=.*on)

在您的情况下,您可以使用以下表达式,而不使用\b & \s

(?<=join)\s+\K(\w+)(?=.+ on )

正则表达式演示

\K 重置了匹配的起始点。之前已经匹配的字符不再包含在最终的匹配结果中。


1
很棒,我不知道那个。因为SO不允许我在之前接受,所以5分钟后我会接受。 :) - Abdul Rehman
在我的当前实践中,join\s中的\s是否需要?我不确定它应该与join一起使用还是不使用。你能否澄清一下?虽然没有\s也可以工作。我试过了。那么,在回顾条件之前加上\b呢? - Abdul Rehman
1
\b 是用于单词边界的。如果没有 join\s,它也会匹配 left outer join123 course c on s.id = c.id,这可能不是您想要的。 - anubhava
1
哇,我需要你。没考虑到这一点。你能解释一下 \b 吗?我还不明白 word boundary 的意思。为什么它在我的情况下有帮助呢?就像你解释的 join\s 一样。 - Abdul Rehman
1
如果没有\b,它将匹配left outer join moon,因为moon中也有on - anubhava
1
感谢您的 PCRE 兼容大师 - Abdul Rehman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接