2016-10-05 5 views
-3

я получил следующую фразу:Невозможно соответствует регулярному выражению

Mark: 5 Mike 2015-01-20 

и мне нужно, чтобы получить Майк из него. Я попытался использовать отрицательный поиск следующим образом:

/^(\s+)((?!Mark\:(\d)).)*&(\w+)$/is 

но он не дал желаемого результата. Также есть несколько пробелов в начале и конце фразы. Любые идеи, как это исправить, будут приветствоваться. Спасибо.

+0

$ var = $ trim ($ var); должен обрезать передние и конечные пробелы или вкладки из строки и, по крайней мере, сделать ваше регулярное выражение немного проще –

+0

Возможно ['\ b [a-zA-Z] + (? = \ s + \ d {4} - \ d { 2} - \ d {2} \ б) '] (https://regex101.com/r/XEC4zS/1)? Целые слова перед строкой даты. –

ответ

1

Предполагая, что Mark:<optional spaces><digits><optional spaces> является префиксом для строки поиска (наш «Майк»), и строка поиска представляет собой последовательность некосмическими символов, то следующий должен сделать:

preg_match('/Mark\:\s*\d+\s*(\S+)/', $the_string, $m); 
// $m[1] = 'Mike' 

Если строка поиска должна быть чем-то более сложным, просто замените \S+ с нужной паттерн. Вы не указали этот случай, поэтому я больше не могу помочь .

+0

Спасибо, работает как ожидалось! – Jack

0

Если вы ищете шаблон ^\s*Mark: \d+\s+(\S+)\s+\S+\s*$, тогда первая группа будет соответствовать вашим потребностям. См. demo.

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