【问题标题】:How can I match repeating pattern in this string?如何匹配此字符串中的重复模式?
【发布时间】:2016-07-12 00:56:59
【问题描述】:

我正在尝试在以下 ODATA 过滤器中查找包含查询的匹配项:

名称 eq 'test' 和 contains(Address,'fdgr345') 和 contains(Description,'test')

我正在使用正则表达式: (contains\s*\(([\w]+)\,\'([\s\w\s]+\')\))+.

但是,此正则表达式仅返回第一个匹配项,即 contains(Address,'fdgr345').

如何获取所有出现的 contains(..., '...') 模式?

【问题讨论】:

  • 可能使用了好的方法或功能。是PHP吗?是 C# 吗?
  • 欢迎您,但您需要更具体地说明您使用的语言。
  • 编辑了标签。我正在使用 PCRE
  • 这是必须在正则表达式引擎之外完成的事情(除非您想将所有匹配项连接到单个字符串)。例如。如果使用 PHP,请将 preg_match 替换为 preg_match_all。任何语言或库中的任何 Regex API 都应该以一种或另一种形式具有此功能。
  • PCRE 不仅没有给我们足够的信息,而且您没有提供正在使用的 PCRE 版本,所以我们甚至不知道您有什么特性/功能限制,无论语言如何。我不是想打倒你,只是一些重要的信息! :) 而且我非常喜欢去年的发布...

标签: regex pcre


【解决方案1】:

您需要传递某种形式的全局标志来告诉正则表达式捕获您的正则表达式的所有实例。

通常看起来像这样:

/REGEX/flags

或者在你的情况下:

/contains\s*\(([\w]+)\,\'([\s\w\s]+\')\)/g

其中 g 标志表示全局。此外,我删除了外部 ()+,因为它试图匹配这样的重复模式:

TEXTnStuff contains(Address,'fdgr345')contains(Address,'abc123') MORETEXT

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-30
    • 1970-01-01
    • 2015-05-23
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多