【发布时间】:2016-11-02 17:03:36
【问题描述】:
我正在为聊天机器人进行语音识别,我需要它来简单地捕捉模式(包括模式)之后的所有内容并将其放入一个输出数组中。我认为这很容易,但我无法让它发挥作用。初始分割模式可能会重复,如果它稍后在字符串中重复,它似乎使用它作为分割点而不是第一次出现。可能有一种简单的方法可以做到这一点。
$input_line = "aaaa delimit bbbb delimit cccc delimit dddd delimit eeee";
preg_match("/(.+) (delimit) (.+)/", $input_line, $output_array);
我希望输出匹配之一是
=> delimit bbbb delimit cccc delimit dddd delimit eeee
但我得到的输出数组是
array(4
0=>aaaa delimit bbbb delimit cccc delimit dddd delimit eeee
1=>aaaa delimit bbbb delimit cccc delimit dddd
2=>delimit
3=>eeee)
所以我只想捕捉第一个分隔符以及它之后的所有内容,即使还有其他分隔符。我试过了:
(.+) ((delimit) (.+)){1}
以及使用 *,?,{} 的其他变体,但似乎无法获得它。对于此示例,4 个字母的组(即 aaaa)可以表示用户可能与定界词一起输入的任何词串。
【问题讨论】:
-
你过度使用了捕获组。只需使用
preg_match("/.*?(delimit.*)/s", $input, $match)(注意第一个.*是懒惰的-.*?可以到达第一个delimit)。甚至preg_match("/delimit.*/s", $input_line, $m)