2013-08-05 4 views
2

У меня есть следующий пример.PHP Regex получить второе сгруппированное совпадение

регулярное выражение:

'/test=([0-9]*).*?marker/' 

тестирование строка:

test=1234 test=5678 unknown marker 

согласованный группа возвращается:

1234 

Как изменить регулярное выражение, чтобы вернуть 5678, наиболее близкое значение к маркер?

спасибо

Редактировать: Я обновил пример. извините за путаницу. где неизвестно, может быть что-нибудь

+0

Я теперь использую RegexBuddy для всех моих регулярных выражений, очень полезно ; http://www.regexbuddy.com/ – thydzik

ответ

0

Любые из этих 2 регулярного выражения будет работать:

$s = 'test=1234 test=5678 unknown marker'; // input 
if (preg_match('/test=(\d+)(?!.*?test=\d+)/', $s, $arr)) var_dump($arr[1]); 
// OR 
if (preg_match('/test=(\d+)\D*marker/', $s, $arr)) var_dump($arr[1]); 

ВЫВОД:

string(4) "5678" 
string(4) "5678" 
+0

спасибо, этот первый пример был именно тем, чем я был. – thydzik

+0

Добро пожаловать, рад, что это сработало. – anubhava

1
$str = 'test=1234 test=5678 marker'; 
preg_match('/test=(\d+)\smarker/', $str, $matches); 
echo $matches[1]; //=> 5678 
+0

спасибо, что работает. что, если пример такой: test = 1234 test = 5678 неизвестный маркер. – thydzik

Смежные вопросы