2010-10-04 2 views
2

Я все еще изучаю PHP Regex, поэтому я надеюсь, что кто-то может помочь мне с тем, что я пытаюсь выполнить.PHP Find String и следующие неизвестные символы

$string = 'Writing to tell you that var MyCode = "dentline"; Learn it.'; 

То, что я хотел бы сделать, это соответствует часть строки, которая считывает

var MyCode =" 

После того как я соответствовать той части, я хочу, чтобы получить остальную часть динамически сгенерированных символов, которые следуют, что строка. В этом примере [dentline] имеет 8 символов, но это может быть не всегда так. Поэтому я хочу, чтобы соответствовать всему пути, пока я не достигну

"; 

После того как я фактически захватил ту часть строки, я хочу, чтобы лишить строку так остальная информация является то, что находится между двойными кавычками

dentline 

Любая помощь очень ценится!

+0

Будет ли ваша строка всегда двойной, а не одинарной кавычкой? Может ли ваша строка содержать экранированные кавычки? Значимы ли пробелы в коде? Является ли имя переменной всегда «MyCode» или это могут быть другие имена? –

+0

Строка всегда двойная. Нет экранированного символа, без пробелов, без изменения имени переменной. Как есть. –

ответ

7

Попробуйте это:

$string = 'Writing to tell you that var MyCode = "dentline"; Learn it.'; 
$matches = array(); 
preg_match('/var MyCode = "(.*?)";/', $string, $matches); 
echo $matches[1]; 

Результат:

dentline 

ideone

Объяснение

 
var MyCode = " Match this string literally and exactly 
(    Start a capturing group. 
.*?    Match any characters, as few as possible (not greedy) 
)     End the capturing group. 
";    Match the closing double quote followed by a semi-colon 

группа захвата «захватывает» содержимое совпадения и сохраняет его в массиве $matches, чтобы потом получить доступ к нему.

Более подробную информацию об этих конструкций можно найти здесь:

Вариации

Если "MyCode" может измениться, затем использовать это вместо:

preg_match('/var \w+ = "(.*?)";/', $string, $matches); 

В этом выражении \w означает «соответствовать любому символу слова». Вы также можете использовать \s+ вместо пространства, чтобы вы могли сопоставить один или несколько символов пробелов (также вкладка и новая строка). Аналогично \s* соответствует нулю или более пробелам. Так что еще одна возможность для вас попробовать:

preg_match('/var\s+\w+\s*=\s*"(.*?)"\s*;/', $string, $matches); 
+0

Удивительно, благодарю! Можете ли вы дать дополнительную информацию о том, как и почему это работает? –

+0

@Dave Kiss: Помогает ли мой обновленный ответ? –

+0

Я не мог бы попросить что-нибудь еще, действительно, отличный ресурс. Благодаря! –

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