我有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 个以上字符,尽可能多,直到行上的最后一个非空格字符(包括它)。
if (preg_match('~^\h*' . preg_quote($word, '~') . '\h*\|\h*\K.*\S~m', $data, $match)) { echo $match[0]; }
冉冉说
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
- 2 回答
- 0 关注
- 97 浏览
添加回答
举报
0/150
提交
取消