2016-02-26 12 views
1

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

$string = preg_replace('/Int.[\s\S]+?\n/', '', $string); 

Вот исходная строка:

My address 
Int. blabla 
blabla blabla 

Возможно ли это?

+0

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

ответ

2

Вы можете использовать следующее решение:

$s = "My address\nInt. blabla\nblabla blabla"; 
$s = preg_replace('~Int\.\h*([^\r\n]+)[\r\n]*~', '', $s); 
echo $s; // => My address\nblabla blabla 

См IDEONE demo

Регулярное выражение будет соответствовать Int., то ноль или более пробелов (\h*, только слева обрезать результат), а затем захватит в группу 1 один или несколько символов, кроме символов линии и символов возврата каретки (([^\r\n]+))

+0

Вы когда-нибудь спите, Wiktor? – Jan

+1

@Jan usleep возможно :) :) :) –

+0

Я спал около 6 часов - достаточно :) Я сплю это в субботу и воскресенье. –

1

Чтобы удалить вашу строку, используйте только следующий код:

$string = "My address\nInt. blabla\nblabla blabla"; 
$regex = '~  # delimiter 
      ^Int\. # Looks for Int. at the beginning of a line 
      .*  # everything else except a newline 
      ~xm'; # free spacing mode and multiline 
$replacement = ''; 
$string = preg_replace($regex, $replacement, $string); 

Вам нужны модификаторы x, чтобы комментарии и m, чтобы каретка (^), чтобы соответствовать любой строке. Если вы хотите, чтобы удалить всю строку (включая символ новой строки, то есть), изменить регулярное выражение:

$regex = '~^Int\..*\R~m'; 

См a demo on ideone.com.

+0

спасибо, что это сработало !!! – Erik

+0

Правильно и четко организовано. –

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