在 PHP 中删除带有正则表达式的文本

Removing text with regular expression in PHP

可变字符串包含的行为

important 1
some words ......
IMPORTANT 34
some words ......
important 99
some words ......

目标是删除包含单词 important 的行,忽略带有符号 $ 的大小写。重要一词还包含一个数字。这一行也可能出现在某些 HTML 代码中,例如 <b>important 1</b><br />

到目前为止我的代码:

<?php
$patterns = '/(important)\s{1,2}\d{1,2}\/';
preg_replace($patterns, '$', $string);
?>

期望的输出:

$ some words ......  
$ some words ......  
$ some words ......

关于模式的一些注意事项

  • 你不需要围绕重要的捕获组,并添加一个单词边界\b以防止匹配unimportant
  • \s也可以匹配换行符
  • 如果要匹配行的其余部分,则不必使用 \d{1,2} 中的量词,因为 . 也可以匹配数字
  • 要匹配行后换行,可以用\R在题目中得到想要的结果

你可能会用到

^.*\bimportant\h+\d.*\R*

说明

  • ^ 字符串开头
  • .* 匹配除换行符外的任何字符
  • \bimportant\h+一个单词边界,匹配important和1+个水平空白字符
  • \d.* 至少匹配一个数字和该行的其余部分
  • \R* 匹配一个可选的换行序列

Regex demo | Php demo

示例代码

$pattern = '/^.*\bimportant\h+\d.*\R*/mi';
$string = 'important 1
some words ......
IMPORTANT 34
some words ......
important 99
some words ......';

$result = preg_replace($pattern, '', $string);

echo $result;

输出

some words ......
some words ......
some words ......

如果您只想匹配整行并使用 $ 断言字符串的结尾,您可以使用:

^.*\bimportant\h+\d.*$

Regex demo