Regex 如何匹配此字符串中的第二个标记

Regex 如何匹配此字符串中的第二个标记,regex,Regex,我有一个HTML片段,在HTML的不同部分包含两个锚定标记 <span id="ctl00_PlaceHolderTitleBreadcrumb_ContentMap"> <span><a class="ms-sitemapdirectional" href="/">My Site</a></span> <span> &gt; </span> <span><a c

我有一个HTML片段,在HTML的不同部分包含两个锚定标记

<span id="ctl00_PlaceHolderTitleBreadcrumb_ContentMap">
    <span><a class="ms-sitemapdirectional" href="/">My Site</a></span>
    <span> &gt; </span>
    <span><a class="ms-sitemapdirectional" href="/Lists/Announcements/AllItems.aspx">Announcements</a></span>
    <span> &gt; </span>
    <span class="ms-sitemapdirectional">Settings</span>
</span>
我希望编写一个正则表达式,它将返回第二个锚标记,该标记的文本为“Announcements”。在尝试编写表达式时,我不断得到两个锚标记的返回——但我只对第二个标记感兴趣

是否可以只匹配第二个标记

编辑:

我总是知道我在寻找一个锚定标签,如果有帮助的话,它的文本中有“公告”

   /<a.+?>[^<>]*Announcements[^<>]*</a>/
另外,正则表达式是解析html的错误工具

   /<a.+?>[^<>]*Announcements[^<>]*</a>/

正则表达式是解析html的错误工具

将片段解析为DOM。使用XPath发布:

(//a)[2]

完成。

将片段解析为DOM。使用XPath发布:

(//a)[2]
完成了

$1匹配第一个标记,$2匹配第二个标记


$1匹配第一个标记,$2匹配第二个标记。如果不想,不必为此使用复杂的正则表达式。由于您希望获得锚定,并且锚定通常具有结束标记,因此您可以使用您最喜欢的语言对每一行进行拆分。 伪码

for each line in htmlfile
do
   var=split line on </a>
   for each item in var
   do
        if item has "Announcement" then
           print "found"
        end if
   done
done

如果不想的话,不必为此使用复杂的正则表达式。由于您希望获得锚定,并且锚定通常具有结束标记,因此您可以使用您最喜欢的语言对每一行进行拆分。 伪码

for each line in htmlfile
do
   var=split line on </a>
   for each item in var
   do
        if item has "Announcement" then
           print "found"
        end if
   done
done

如果您知道元素的确切文本,并且知道它是片段中的最后一个元素,那么您就有足够的信息将其与正则表达式匹配。我怀疑你在使用这样的正则表达式:

/<a\s+.*>Announcements<\/a>/s
…没有帮助;不情愿的量词会尽快停止匹配,但这里的问题是它开始匹配得太快。您需要将.*替换为更具体的内容,即只能匹配单个标记打开之间的内容:

/<a\s+[^<>]+>Announcements<\/a>/

现在,当它到达第一个标记的末尾并且没有看到通知时,它将中止匹配尝试,继续移动并在第二个标记处重新开始。

如果您知道元素的确切文本,并且您知道它是片段中的最后一个元素,那么您有足够的信息将其与正则表达式匹配。我怀疑你在使用这样的正则表达式:

/<a\s+.*>Announcements<\/a>/s
…没有帮助;不情愿的量词会尽快停止匹配,但这里的问题是它开始匹配得太快。您需要将.*替换为更具体的内容,即只能匹配单个标记打开之间的内容:

/<a\s+[^<>]+>Announcements<\/a>/

现在,当它到达第一个标记的末尾并且没有看到通知时,它将中止匹配尝试,继续,从第二个标记开始。正则表达式的+1是解析html的错误工具-绝对。正则表达式的+1是解析html的错误工具-绝对。我认为这是我要寻找的最接近的工具,而不是使用正则表达式。我想这是我要寻找的最接近的工具,而不是使用regex.mable duplicate of mable duplicate of mable duplicate of mable duplicate of