很简单的正则表达式语法问题。
我有一个文本块,我想找到href="
或href='
的实例,[
或http://
我可以通过
获得“[
”
record.body =~ /href=['"](?!\[)/
我可以通过
获得“http://
”
record.body =~ /href=['"](?!http\:\/\/)/
但我无法弄清楚如何将两者结合起来。
要明确:我想找到像这样的坏字符串
`href="www.foo.com"`
但我很喜欢(即不想找到)像这样的字符串
`href="http://www.foo.com"`
`href="[registration_url]"`
答案 0 :(得分:1)
将alternative list与管道|
符号结合使用,以结合前瞻条件:
(?!http\:\/\/|\[)
因此,要匹配href,您可以使用以下正则表达式:
href=\"((?!http\:\/\/|\[)[^\"]+?)\"
答案 1 :(得分:1)
使用交替运算符组合两者。
href=['"](?!http\:\/\/|\[)
更具体地说,它会是。
href=(['"])(?!http\:\/\/|\[)(?:(?!\1).)*\1
这将处理href
部分中的单引号或双引号字符串。这与href='foo.com"
或href="foo.com'
(无法匹配的引号)等字符串不匹配
(['"])
会捕获双引号或单引号。 (?!http\:\/\/|\[)
并且匹配的引号后面不会跟http://
或[
,如果是,则转到下一个模式。 (?:(?!\1).)*
匹配任何字符,但不匹配捕获的字符,零次或多次。 \1
后跟捕获的角色。