在 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*
匹配一个可选的换行序列
示例代码
$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.*$
可变字符串包含的行为
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*
匹配一个可选的换行序列
示例代码
$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.*$