在执行一些小的正则表达式任务时,我遇到了这个问题。我有一个字符串,它是一个标签列表,看起来像这样:
foo,bar,qux,garp,wobble,thud
我需要做的是检查此列表中是否有某个标签,例如“ garp”。(无论是否匹配,最终匹配的内容并不重要。)
我的第一个愚蠢尝试是使用以下正则表达式:
[^,]garp[,$]
我的想法是在'garp'之前应该是行/字符串的开头或逗号,在'garp'之后应该是逗号或行/字符串的结尾。
现在,很明显该正则表达式是错误的:^和$都在字符类[]的上下文中改变了它们的行为。
我最终想到的是以下内容:
^garp$|^garp,|,garp,|,garp$
这个正则表达式只一一处理4种情况。(标记在列表的开头,中间,结尾或作为列表的唯一元素。)最后一个正则表达式在我眼中有点难看,为了娱乐起见,我想稍微做一下更优雅。
有没有一种方法可以在字符类的上下文中使用行首/行尾(^和$)?
编辑:好的,希望有更多信息,所以在这里是:我在Oracle SQL语句中使用它。可悲的是,这不允许有任何环视断言,但由于我只对是否存在匹配项(而不是匹配项)感兴趣,因此这实际上并不会影响我。标签可以包含非字母字符,例如-或_,因此\ bgarp \ b将不起作用。正如SilentGhost所说,一个标签也可以包含另一个标签,因此/ garp /也不起作用。
/garp/
本身应该没问题。它将告诉您字符串“ garp”是否与行中的任何位置匹配。几个问题:您使用哪种语言?您的更大目标是什么?(例如,您是否需要提取匹配项?)为什么您认为需要匹配每行可能出现“ garp”的特定方式?