【问题标题】:Match words beginning with an asterisk and the following word using regex look ahead function使用正则表达式前瞻功能匹配以星号开头的单词和以下单词
【发布时间】:2013-04-21 19:23:04
【问题描述】:

我需要一个正则表达式来匹配以星号开头的单词和紧随其后的单词。在下面的示例中,它将匹配 eismoud tempordolore magna

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do *eiusmod tempor incididunt ut labore et *dolore magna aliqua.

我正在使用 RegexBuddy。

【问题讨论】:

  • 如果我们有一个以星号开头的最后一个单词结尾的字符串会发生什么,例如:...sed do *eiusmod?
  • 如果您的问题得到解决,请不要忘记选择正确的答案;)

标签: regex match regexbuddy


【解决方案1】:

请试试这个表达方式:

(?<!\S)\*\w+(?:[^\w]+\w+)?\b

要捕获与正则表达式匹配的所有行,您可以将表达式替换为捕获行的表达式:

^.*(?<!\S)\*\w+(?:[^\w]+\w+)?\b.*$

然后在EspressoDesign mode 中设置Multiline 选项(窗口底部的选项,不在Options 选项卡中)。瞧!搜索结果现在包含包含我们匹配项的所有行。

【讨论】:

  • Alexey 完美运行,谢谢一百万!如果该行中的最后一个单词以星号开头,它应该只匹配那个单词。(虽然我不确定我的文本中是否有这样的单词)。
  • @TotoKalvera 不客气。我已经添加了一个非捕获组(?:...) 来涵盖这个案例。
  • 这只有在星号之前有一个字母数字字符时才有效。
  • @TimPietzcker 你是对的。谢谢你。我也解决了这个问题:)
  • 现在...您不再需要\b,因为(根据定义)* 和以下\w+ 之间总是存在单词边界。您可以在 \* 之前执行 (?&lt;!\S) 以确保在 * 之前有空格或字符串的开头,如果这是您要表达的内容。
猜你喜欢
  • 1970-01-01
  • 2013-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-16
  • 1970-01-01
相关资源
最近更新 更多