现在正常表达
<a\s(class|href|target)=\"(.*)\"\s(class|href|target)=\"(.*)\"\s(class|href|target)=\"(.*)\">(.*)<\/a>/g
匹配此链接
<a href="index.php" target="5454 target 54" class="nav">test</a>
但我想只使用一个正则表达式,条件匹配每个网址
示例:
<a href="index.php">cal</a>
<a class="xxx" href="index.php">cal</a>
<a class="navbar-brand" href="index.php" target="">cal<span>.net</span></a>
答案 0 :(得分:2)
您可以使用此(demo):
<a
\s*(?:(class|href|target)=\"(.*?)\")?
\s*(?:(class|href|target)=\"(.*?)\")?
\s*(class|href|target)=\"(.*?)\"
\s*
>
(.*?)
<\/a>
它使用可选的非捕获组:(?:)?
和延迟量词*?
。输出是:
MATCH 1
5. [3-7] `href`
6. [9-18] `index.php`
7. [20-23] `cal`
MATCH 2
1. [31-36] `class`
2. [38-41] `xxx`
5. [43-47] `href`
6. [49-58] `index.php`
7. [60-63] `cal`
MATCH 3
1. [71-76] `class`
2. [78-90] `navbar-brand`
3. [92-96] `href`
4. [98-107] `index.php`
5. [109-115] `target`
6. [117-117] ``
7. [119-139] `cal<span>.net</span>`