Найти всю строку, содержащую слово с регулярными выражениями php

Я хочу найти слово «сеанс» в тексте. Но я хотел бы получить всю строку, в которой появляется это слово. До сих пор я придумал это.

$pattern="[^\\n]*session[^\\n]*"; preg_match_all($pattern,$content, $matches, PREG_OFFSET_CAPTURE); 

Но я получаю сообщение об ошибке «Неизвестный модификатор * *». Есть идеи, как сделать такое регулярное выражение?

В вашем регулярном выражении отсутствуют разделители, поэтому ваша ошибка:

 $pattern = "/[^\\n]*session[^\\n]*/"; // or, with single quotes, you don't need to escape \n $pattern = '/[^\n]*session[^\n]*/'; 

Если я правильно истолковываю ваши намерения, вы пытаетесь совместить нуль или больше не строк новой строки, а затем «сеанс», за которым следует ноль или больше строк новой строки.

Более простой (потенциально более правильный) шаблон будет следующим:

 $pattern = '/^.*\bsession\b.*$/m'; 

То есть, с начала строки ( ^ ) соответствует 0 или более любого символа ( .* ), Границы слова ( \b ), слова «сеанс», другой границы слова, другой серии символов и конец строки ( $ ), совпадающий по нескольким строкам (модификатор m ).

Вы как бы заново изобрели якоря ( ^ и $ ) с [^\n] что несколько неочевидно, но пропустили границы слов, что, вероятно, не желательно, поскольку вы соответствуете любому слову, содержащему слово «сеанс» " . То есть ваш будет соответствовать строке, содержащей «сеансы» или «владения» или «навязчивые идеи» или «abcsessionxyz», где моя не будет; если это нежелательно, вы можете удалить урожай \b /^.*session.*$/m и наши шаблоны будут более или менее эквивалентными.

Вот доказательство концепции, нахождение всей средней линии, которая содержит слово:

 <?php $lines ="This is a test of skipping the word obsessions but finding the word session in a bunch of lines of text"; $pattern = "/^.*\bsession\b.*$/m"; $matches = array(); preg_match($pattern, $lines, $matches); var_dump($matches); 

Вывод:

 array(1) { [0]=> string(29) "finding the word session in a" } 

Ваш образец нашел бы линию «пропустить слово навязчивые идеи, но».