为了账号安全,请及时绑定邮箱和手机立即绑定

如何将 foreach 循环中的字符串与 PHP 中的 preg_split 匹配

如何将 foreach 循环中的字符串与 PHP 中的 preg_split 匹配

PHP
呼唤远方 2022-09-03 14:45:13
我有2个部分的数据与这个分离器|$data = 'hello | Hello thereprice | Lets talk about our support.how are you ?| Im fine ';我的静态单词是$word= 'price'我的代码 $msg = array_filter(array_map('trim', explode("\n", $data))); foreach ($msg as $singleLine) {            $partition = preg_split("/[|]+/", trim($singleLine), '2');            $part1 = strtolower($partition[0]);            }如何匹配数据?我需要结果如下:Let's talk about our support
查看完整描述

2 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

您可以使用单个正则表达式方法:

'~^\h*price\h*\|\h*\K.*\S~m'

观看正则表达式演示

  • ^- 一行的开始(由于修饰符)m

  • \h*- 0+水平空格

  • price- 你的静态单词

  • \h*\|\h* - |用 0+ 个水平空格括起来

  • \K- 匹配重置运算符,丢弃到目前为止匹配的文本

  • .*\S- 除换行符以外的 0 个以上字符,尽可能多,直到行上的最后一个非空格字符(包括它)。

PHP 代码

if (preg_match('~^\h*' . preg_quote($word, '~') . '\h*\|\h*\K.*\S~m', $data, $match)) {
    echo $match[0];
}


查看完整回答
反对 回复 2022-09-03
?
冉冉说

TA贡献1877条经验 获得超1个赞

Wiktor的答案似乎不错,但您可能希望将数据转换为数组。key -> value


如果是这种情况,您可以执行以下操作:


$avp = [];

if (preg_match_all('/^ \h* (?<key>[^|]+?) \h* \| \h* (?<value>[^$]+?) \h* $/mx', $data, $matches, PREG_SET_ORDER)) {

  foreach ($matches as [, $key, $value]) {

    $avp[$key] = $value;

  }

}


$word = 'price';

echo $avp[$word];  // Lets talk about our support.

演示:https://3v4l.org/uMBAg


查看完整回答
反对 回复 2022-09-03
  • 2 回答
  • 0 关注
  • 97 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信