【问题标题】:regext lookbehind word having space-characters正则表达式查找具有空格字符的单词
【发布时间】:2016-02-15 08:03:48
【问题描述】:

我正在尝试在join and on 之间获取表名course。两者之间可以有任何空格字符。

我应用了以下返回空格+课程的正则表达式。我试过(?<=join\s+)(\w+)(?=.*on),但问题是它说lookbehind needs to be zero width

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

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

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

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

【问题讨论】:

  • 仅供参考,错误信息不正确。我认为他们的意思是说“fixed width”,但这也不完全正确。该消息继续说您不能在后视中使用量词。这是正确的部分(在 PCRE 中)。
  • 要学的东西太多了。很棒的信息。会记得的。谢谢

标签: regex sublimetext3


【解决方案1】:

由于sublime text editor 使用PCRE 正则表达式,您可以使用\K 重置匹配信息:

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

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

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

RegEx Demo

\K 重置报告匹配的起点。任何以前消耗的字符都不再包含在最终匹配中。

【讨论】:

  • 甜,不知道。 5 分钟后会接受,因为之前不会让我这样做。 :)
  • \b 用于单词边界。如果没有join\s,它也会匹配您可能不想要的left outer join123 course c on s.id = c.id
  • O_O 哇,我需要你。没有考虑到。你能解释一下 \b 我还不明白word boundary 的含义。为什么对我有帮助。正如你所解释的join\s
  • 如果没有\b,它将匹配left outer join moon,因为moon 中也有on
  • 谢谢PCRE Compatibale Sensei
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-24
相关资源
最近更新 更多