Извлекайте слова между двумя словами с помощью регулярных выражений - PullRequest
2 голосов
/ 10 ноября 2011

У меня есть строка:

8 ночей, когда вы рисуете пуделя

Я хочу найти все, что находится между nights и poodle, поэтому в приведенном вышеНапример, вывод должен быть you doodle.

Я использую приведенное ниже регулярное выражение.Пожалуйста, кто-то может указать, что я могу делать неправильно?

if (preg_match("nights\s(.*)\spoodle", "8 nights you doodle poodle", $matches1)) {
    echo $matches1[0]."<br />"; 
}

Ответы [ 2 ]

7 голосов
/ 10 ноября 2011

Вы близки, но вы получаете неправильный индекс на $matches1.$matches1[0] вернет строку, которая соответствует preg_match ();

Попробуйте $matches1[1];

Кроме того, вам необходимо заключить регулярное выражение в / символов;

if (preg_match("/nights\s(.*)\spoodle/", "8 nights you doodle poodle", $matches1)) {
    echo $matches1[1]."<br />"; 
}

Выход

you doodle<br />
0 голосов
/ 10 ноября 2011

Вы, вероятно, хотите что-то вроде этого

if (preg_match("/nights\s(.*)\spoodle/", "8 nights you doodle poodle", $matches1)) {
    echo $matches1[1]."<br />"; 
}

Посетите rubular.com, чтобы проверить свои регулярные выражения.Вот еще один важный вопрос:

Использование регулярного выражения для сопоставления строки между двумя строками при исключении строк

...