Получить слово из строки - PHP - PullRequest
2 голосов
/ 03 декабря 2010

Я пытаюсь извлечь слово, соответствующее определенному шаблону, из разных строк.

Строки различаются по длине и содержанию.

Например:

Я хочуизвлечь любое слово, начинающееся с jac, из следующих строк и заполнить массив полными словами:

  • Я купил вчера куртку.
  • Джек идет домой.
  • Я хочу поехать в Джексонвилль.

Полученный массив должен быть [Jacket, Jack, Jacksonville]

Я пытался использовать preg_match (), но по какой-то причинеэто не сработает.Любые предложения ???

$q = "jac";
$str = "jacket";
preg_match($q,$str,$matches);

print $matches[1];

Возвращает ноль: S.Я не знаю, в чем проблема.

Ответы [ 2 ]

4 голосов
/ 03 декабря 2010

Вы можете использовать preg_match как:

preg_match("/\b(jac.+?)\b/i", $string, $matches);

Посмотреть

1 голос
/ 03 декабря 2010

Вы должны прочитать руководство несколько сотен раз, и оно в конечном итоге придет к вам.

В противном случае то, что вы пытаетесь захватить, может быть выражено как "взгляддля 'jac', за которым следуют 0 или более букв * и убедитесь, что ему не предшествует буква ", которая дает вам: /(?<!\\w)(jac\\w*)/i

Вот пример с preg_match_all(), так что вы можете захватить все вхождения шаблона, а не только первый:

$q = "/(?<!\\w)(jac\\w*)/i";
$str = "I bought a jacket yesterday.
Jack is going home.
I want to go to Jacksonville.";

preg_match_all($q,$str,$matches);

print_r($matches[1]);
  • Примечание: под «буквой» я подразумеваю любой «символ слова».Официально в него входят цифры и другие «буквенные знаки».В зависимости от конкретных обстоятельств, можно выбрать \ w (символ слова) или \ b (граница слова).

Вы можете включить дополнительные символы, используя класс символов * 1020.*.Например, чтобы сопоставить любой символ слова, а также одинарные кавычки, вы можете использовать [\w'], и ваше регулярное выражение становится:

$q = "/(?<!\\w)(jac[\\w']*)/i";

В качестве альтернативы, вы можете добавить необязательный 's в существующий шаблон, так что вы записываете «jac», за которым следует любое количество символов слова, за которыми следуют «s»

$q = "/(?<!\\w)(jac\\w*(?:'s)?)/i";

Здесь ?: в скобках означает, что вам на самом деле не нужно захватыватьих содержание (поскольку они уже заключены в пару круглых скобок, это не нужно), а ? после скобок означает, что сопоставление является необязательным.

...