我有如下字符串:
Hi X
Blah
Kind regards
ABC
和
Hi X
Blah
Regards
CBA
因此关键是换行符和单词“ regards”(不区分大小写)。我想使用PHP在包含“问候”的行之前获取字符串的一部分。例如。对于这些示例,结果应仅为:
Hi X
Blah
我尝试了以下操作,但在某些情况下无法正常工作(例如,如果“种类”在字符串中多次出现)。预先感谢!
$matches = array();
if (preg_match("/\n(.*?)regards/i", $message, $matches) == 1) {
$stop_at = $matches[1];
$split = explode($stop_at,$message);
$message = $split[0];
}
答案 0 :(得分:1)
您真正想要的是处理多行字符串的正则表达式。为此,您可以使用m
标志(PCRE_MULTILINE
)。
例如,我会使用preg_split()
来拆分令牌上的字符串
$found = trim(preg_split('/^.*regards$/im', $message, 2)[0]);
一些注意事项:
trim()
删除了“布拉” 之后的空行(您的示例排除了该行)preg_split()
上设置了2个限制。鉴于您只检索第一个拆分,所以这是多余的,但在我看来,这意味着PHP的工作量较少(实际情况可能有所不同)。答案 1 :(得分:0)
您可以使用正则表达式
(?si).+\b(?=\n+[\w ]*regards)
它将匹配所有内容,直到一个单词边界,然后先查找换行符,然后再换行上面带有regards
的行(可能由单词字符或空格组成)。
$str = "Hi X
Blah
Kind regards
ABC";
preg_match('/(?si).+\b(?=\n\s*[\w ]*regards)/', $str, $match);