我有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 關注
- 124 瀏覽
添加回答
舉報
0/150
提交
取消