preg_match 替换整行

preg_match replace entire line

我是 PHP preg_match 函数的新手。如何使用 preg_match?

替换特定字符前的所有内容

样本:

text1
text2
text3
text3
# text 5

我想删除“#”号前的所有内容。那可能吗?这是我的代码但不确定

$replace_match = '/^.*' . '#' . '.*$(?:\r\n|\n)?/m';

不要使用 preg_matches(),

如果要删除某个字符串之前的所有字符,请在条件中使用 strpos() function with some conditions and use str_replace()..

这是实现这一点的非常简单和标准的方法。

您可以匹配所有不以 # 开头的行,直到您可以匹配开头的 #

^(?:(?!#).*\R)+#
  • ^ 字符串开头
  • (?:非捕获组
    • (?!#).*\R 否定前瞻,直接在右边断言not #。如果是这种情况,则匹配整行后跟一个换行符
  • )+ 关闭组并重复 1+ 次以匹配至少一行
  • # 按字面匹配以确保字符存在

Regex demo

在替换中使用 #

例子

$re = '/^(?:(?!#).*\R)+#/m';
$str = 'text1
text2
text3
text3
# text 5';

echo preg_replace($re, "#", $str);

输出

# text 5