2015-02-10 3 views
7

встречаемости у меня есть следующая строка:RegEx: Матч энный

_name=aVlTcWRjVG1YeDhucWdEbVFrN3pSOHZ5QTRjOEJZZmZUZXNIYW1PV2RGOWYrczBhVWRmdVJTMUxYazVBOE8zQ3JNMmNVKzJLM2JJTzFON3FiLzFHUE0xY0pkdz09LS1jbkkwaWoxUUl3YVhMMkhtZHpaOW13PT0"%"3D--57356371d167f" 

Я хочу, чтобы соответствовать все между = и концом "(заметим, есть и другие цитаты после этого, так что я не могу просто выбрать последний ").

Я пробовал использовать _name=(.*?)", но есть и другие цитаты в строке. Есть ли способ сопоставить третью цитату? Я попытался _name=(.*?)"{3} но {3} матчей для котировок спины к спине, то есть """

Вы можете попробовать это here

+1

введите '' 'внутри круглых скобок. –

+0

Это по-прежнему соответствует только первой цитате – Bijan

ответ

6

Вы можете использовать это регулярное выражение:

_name=(?:[^"]*"){3} 

RegEx Demo

+0

Это будет включать в себя последний '' 'в матче. Я думаю, что это не то, что хочет OP ... – hek2mgl

+0

Это нормально, если он включает в себя третий и последний' ''. Я не хотел, чтобы он захватывал дальнейшие '' 's – Bijan

+0

. Если вы хотите остановить совпадение ** перед 3-м совпадением **, используйте: **' _name = (?: [^ "] *") {2} [^ "] *' ** – anubhava

1

Если хотят, чтобы соответствовать все между первым и третьим (!) Двойными кавычками (третий ISN» т обязательно последний, вы сказали), вы можете использовать шаблон, как это:

$string = '_name=foo"bar"test" more text"'; 
// This pattern will not include the last " (note the 2, not 3) 
$pattern = '/_name=((.*?"){2}.*?)"/'; 

preg_match($pattern, $string, $m); 
echo $m[1]; 

Выход:

foo"bar"test 

Оригинальный ответ:

Я не уверен, если я правильно получил вас, но это звучит, как вы хотите, чтобы выполнить так называемый жадного матча означает, что вы хотите, чтобы соответствовать строке, пока не найдешь последний " независимо от того, содержит ли строка несколько ".

Чтобы выполнить жадный матч, просто перенесите ?, как это:

_name=(.*)" 

Вы можете попробовать его здесь: https://regex101.com/r/uC5eO9/2

+0

Это часть запроса на завивание. После этого есть и другие цитаты, но я просто ищу, чтобы соответствовать третьей цитате. Ваш код будет соответствовать _last_, который не то, что я хочу. – Bijan

+0

Тогда ваш пример был плохим. Позвольте мне показать простой пример ... – hek2mgl