匹配一个词在另一个词之前的最后一次出现

Match last occurrence of a word before another word

我希望匹配以下 html 代码段中 jdbc/myds 之前的最后一个 refId,因此我希望返回 'DataSource_1478537797505'

我试过了

(?s)refId=(.*?)&(?!refId).*jdbc\/myds

与单行模式一样。 匹配一个 refId= 并将所有内容分组到下一个 &,同时在遇到 myds

之前消极地向前看 refId 的其他实例
<div id="nameCollectionDiv9">

    <A HREF="dataSourceCollection.do?csrfid=644853468&EditAction=true&refId=DataSource_1436886953637&contextId=cells%3AWASUAT1_Cell&resourceUri=resources.xml&perspective=tab.configuration">

<div id="jndiNameCollectionDiv9">

    jdbc/old_workflow_XA

    <A HREF="dataSourceCollection.do?csrfid=644853468&EditAction=true&refId=DataSource_1436886597868&contextId=cells%3AWASUAT1_Cell&resourceUri=resources.xml&perspective=tab.configuration">

<div id="jndiNameCollectionDiv10">

    jdbc/old_workflow

<div id="nameCollectionDiv11">

    <A HREF="dataSourceCollection.do?csrfid=644853468&EditAction=true&refId=DataSource_1478537797505&contextId=cells%3AWASUAT1_Cell&resourceUri=resources.xml&perspective=tab.configuration">

    jdbc/myds

谢谢 马克.

您应该会发现使用 xhtml 解析器 比使用正则表达式更有用,它通常是正确的工具。

无论如何,如果你仍然想使用正则表达式,那么你可以使用这样的正则表达式(不需要使用环视):

(?s).*refId=(.*?)&

Working demo