preg 替换为正则表达式

preg replace with regex between

我正在尝试删除一段在 Int. 和换行符之间开始的字符串。

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

这是源字符串:

My address
Int. blabla
blabla blabla

这可能吗?

您可以使用以下解决方案:

$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*,就在结果的左边-trim),然后将一个或多个字符捕获到第 1 组中除了换行和回车 return 符号 (([^\r\n]+))

要删除字符串,只需使用以下代码:

$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