好的,我得到了这个正则表达式:
^[\w\s]+=["']\w+['"]
现在正则表达式将匹配:
a href ='google'
a href =“google”
以及
a href ='google'
如何强制使用正则表达式来匹配其引用?
如果第一个报价是单引号,我怎样才能使最后一个报价也是单引号而不是双引号
答案 0 :(得分:6)
^[\w\s]+=(["'])\w+?\1
请注意,您希望在第二个?
之后加上+
,否则它会变得贪婪。但是,通常这不是解析HTML的正确方法。使用Beautiful Soup。
答案 1 :(得分:0)
试试这个:
^[\w\s]+="\w+"|^[\w\s]+='\w+'
答案 2 :(得分:0)
恐怕你必须做很长的事情:
^[\w\s]+=("\w+"|'\w+')
从技术上讲,确保正确匹配/嵌套引号对于常规语法来说不是问题,因此对于更复杂的问题,您必须使用正确的解析器(或perl6样式扩展正则表达式,但它们在技术上不会作为正则表达式进行分类)。
答案 3 :(得分:0)
将['"]
替换为\1
以使用反向引用(捕获组)
^[\w\s]+=["']\w+\1
答案 4 :(得分:0)
你想要匹配什么?听起来你想要匹配:
=
那将是:^(\w+)\s+(\w+)\s*=\s*(?:'([^']*)'|"([^"]*)")
这将允许匹配:
a href=''
- 空attr a href='Hello world'
- 引用部分中的空格和其他非单词字符a href="one 'n two"
- 引用部分中不同类型的引号a href = 'google'
- = 并且禁止这些原始正则表达式允许的内容:
a b c href='google'
- 额外的话='google'
- 左侧只有空格href='google'
- 左边只有attr 它仍然听起来不完全正确 - 您是否尝试将标签与一个属性匹配?
使用此正则表达式,标记名称将位于$1
中,attr名称位于$2
中,而attr值位于$3
或$4
中(另一个为零 - 最多语言区分未采用nil vs group采取的组,但如果需要则使用""
清空。
如果你想在双重引用的attr值中允许单引号,那么确保attr值在同一组中的正则表达式会更加混乱 - 反之如同^(\w+)\s+(\w+)\s*=\s*(['"])((?:(?!\3).)*)\3
((?!)
为零宽度否定前瞻 - (?:(?!\3).)
表示[^\3]
之类的内容,但不支持后者。
如果你不关心这个^(\w+)\s+(\w+)\s*=\s*(['"])(['"]*)\3
会很好(两个$3
都是引用类型,$4
attr值)。
顺便说一下上面的(["'])\w+?\1
- \w
与引号不匹配,因此?
不会改变任何内容。
说了这么多,使用真正的HTML解析器; - )
这些正则表达式适用于Perl和Ruby。其他语言通常复制Perl的regexp系统,但通常会引入微小的更改,因此可能需要进行一些调整。尤其是负面预测的人可能不受支持。