【问题标题】:POSIX-ERE: Match a word but not when between square bracketsPOSIX-ERE:匹配一个单词,但在方括号之间不匹配
【发布时间】:2018-04-09 11:51:25
【问题描述】:

我正在尝试匹配出现在方括号之间的“组织”一词:

示例字符串:

组织“[组织名称]”必须至少包含一个 每个组织的用户。 [组织] 的 ID [id] 只能包含数字

我尝试使用:

(?:^|\s)(organization)(?!])

但我正在使用的应用程序中唯一支持的风格是POSIX Extended Regex。

【问题讨论】:

  • 您要替换吗?
  • 您使用的工具很可能支持返回捕获的内容。试试\[[^][]*]|\b(organization)\b。要删除这些事件,请使用 (\[[^][]*])|\borganization\b 并替换为 \1。 BTW,如果是AHK,它支持PCRE,而不是POSIX ERE。

标签: regex posix-ere


【解决方案1】:

出现“组织”这个词,但不是出现在方括号之间

最短的方法是(?!<\[)(organization)(?!=\])

我正在使用的应用程序中唯一支持的风格是 POSIX Extended Regex。

由于您无法使用否定环视:([^[]|^)(organization)([^]]|$)

这与[organizationorganization] 不匹配;如果您希望它在缺少左括号或右括号时成功,则必须明确添加这些情况:

([^[]|^)(organization)([^]]|$)|\[(organization)([^]]|$)|([^[]|^)(organization)\]

【讨论】:

  • 这实际上匹配 [组织名称] 中的组织。所以不是答案。
  • @revo:好点。这没有具体说明,但我很想假设它不应该。
  • 虽然它不在给定的样本输入中,但第一句话是通用的。
【解决方案2】:

是的,你是对的,括号中的出现不应该匹配

感谢您的帮助! 我终于用了这个变种:

([^\[]|^)(organization)([^\]]|$)

我不得不转义范围内的 [

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    • 1970-01-01
    • 2013-07-24
    相关资源
    最近更新 更多