захватить всю линию - PullRequest
       6

захватить всю линию

0 голосов
/ 18 февраля 2012

Как захватить всю строку, в которой есть «mystring». Пример:

mystring    er  as
        mystring2            //spaces before and after string

Я пробовал ^ и $, но не работает.

Спасибо.

Ответы [ 4 ]

0 голосов
/ 18 февраля 2012

Как насчет:

$string = '
mystring    er  as
        mystring2            //spaces before and after string
';
preg_match_all('/(.*\bmystring\b.*)+/m', $string, $m);
print_r($m);    

выход:

Array
(
    [0] => Array
        (
            [0] =>     mystring    er  as
        )

    [1] => Array
        (
            [0] =>     mystring    er  as
        )

)
0 голосов
/ 18 февраля 2012

Используйте флаг m для многоканального улова и следите за тем, чтобы обе маски .* были жадными.
В PHP:

#^(.*?mystring.*?)$#m

или

#^(.*mystring.*)$#Um
0 голосов
/ 18 февраля 2012

Если вы хотите сопоставить строку с любым вариантом 'mystring', это подойдет: /^.*mystring.*$/m

Если вы строго хотите сопоставить «mystring», вам потребуется границы слова : /^.*\bmystring\b.*$/m

Шаблон объяснил:

  • ^ начало соответствия начала данных или символа новой строки
  • .* соответствует нулю или более символов, которые не являются новой строкой
  • \b соответствует границе слова
  • mystring соответствует строке: mystring
  • \b соответствует границе слова
  • .* соответствует нулю или более символов, которые не являются новой строкой
  • $ соответствует концу данных или символу новой строки (EOL)

Флаг 'm' заставляет ^ и $ соответствовать новым строкам в данных.

Пример сценария:

<code><?php
$string = <<<EOT
        mystring0            
mystring    er  as
        mystring2            //spaces before and after string
EOT;

// match mystring and mystring2 for example
preg_match('/^.*mystring.*$/m', $string, $match);
echo "MATCH: <pre>" . $match[0] . "
\ n "; // печатает 'mystring0' // сопоставим только mystring и mot mystring2, например preg_match ('/^.* \ bmystring \ b. * $ / m', $ string, $ match); echo "MATCH:
" . $match[0] . "
\ n"; // выводит 'mystring er as' ?>

b.t.w. Предварительные теги - это то, что пробелы не будут обрезаться при выводе HTML, просто из комментария о пробеле, который, как я думал, может быть, была вашей проблемой.

0 голосов
/ 18 февраля 2012
^.*mystring.*$

Возможно, вам понадобится захватить скобки, но, вероятно, нет.

...