2016-11-11 7 views
0

Я ищу, чтобы соответствовать последним RefID перед тем JDBC/myds в следующих фрагмент кода HTML, так что я бы искать, чтобы вернуться «DataSource_1478537797505»Match последнее вхождение слова перед другим словом

Я попытался

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

как в режиме одиночной линии. Соответствует RefID = и группу все до следующего & в то время как отрицательно смотрит вперед для других случаев RefID перед тем, сталкивающимся myds

<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 

Благодарность Марка.

+1

Если вы хотите сохранить его аналогично тому, как вы его получили, попробуйте: refId = (. *?) (& (?! refId) | [^ &]) * jdbc \/myds'. Я бы опубликовал это как ответ, но regex101, похоже, не работает для меня, и я чувствую, что должен дать рабочий пример – Addison

+0

Спасибо за попытку Addison, я попробовал это, но безрезультатно. Каким-то образом он по-прежнему соответствует первому redId прямо через секунду до jdbc/myds. В этот момент я сбитый с толку, я не понимаю, почему нет [^ [refId]] *, который позволяет вам сопоставлять независимо от того, не является ли строка refId, но только [^ ...] может отрицательно совпадать с символами групп, такими как все буквы в 'refId' –

ответ

1

Вы должны найти более полезным с помощью анализатора xhtml, чем при использовании регулярного выражения, это обычно правильный инструмент для этого.

Во всяком случае, если вы все еще хотите использовать регулярное выражение, то вы можете использовать регулярные выражения, как это (нет необходимости использовать lookarounds):

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

Working demo

+0

Wow, который работает ?? Я не могу понять, почему первый refId не совпадает с Federico, но эта работа? –

+0

(? S). * RefId = (. *?) &. * Jdbc \/myds для полноты в случае, если еще один источник данных был определен после того, который я ищу –

+0

@MarkGargan трюк заключается в том, что я использую '. *' это жадный оператор, поэтому он будет много до последнего 'refId'. Вы можете играть с жадным и ленивым оператором, чтобы увидеть разницу. Леневым (или нескромным) оператором будет '. *?' –