有人可以帮我完成我的正则表达式吗?
我的字符串格式如下:
<FC012D>{p:19}Ja?<BF093C> Du möchtest<BC>zur Königin?<BC><BF040027><BF07>{p:20}<F8012D>Hmm...<BF093C><BC>Du bist gekommen um den<BC>Titel Kriegerin<BC>zu erhalten?<BD><BC>Verstehe.<BF093C> Das ist ganz<BC>schön tapfer für so<BC>eine junge Dame.<BD><BC>Die Königin wird sicher<BC>auch sehr<BC>überrascht sein.<BD><BC>{t:19}Bitte sehr,<BC>geh direkt hinein.<BD><FF>{t:20}Treibe Dich hier nicht<BC>herum, wenn Du hier<BC>nichts zu suchen hast!<BD><FF>
我需要将它们分成带有preg_match_all的数组,以获得3种类型的数组元素:
这是我到目前为止所拥有的:
preg_match_all("/<[^>]*>|{(.*?)}|(\(.*?)\)/", $input_lines, $output_array);
我需要一些最后一个选项的帮助,在两者之间捕获字符串。 http://www.phpliveregex.com/p/kdW
答案 0 :(得分:3)
使用带有PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY
标记的preg_split
和以下正则表达式:
'~(<[^<>]*>|{[^{}]*})~'
请参阅regex demo。它匹配并捕获到第1组两种类型的子串:
<[^<>]*>
- <
后跟0 {+ 1}}和<
以及>
>
- {[^{}]*}
后跟0 {+ 1}}和{
以及{
}
将包含所得到的数组中的所有匹配项。 }
将删除不必要的空元素。
请参阅PHP demo:
PREG_SPLIT_DELIM_CAPTURE