PHP preg_match_all正则表达式用于分隔字符串

时间:2017-05-26 09:24:48

标签: php regex

有人可以帮我完成我的正则表达式吗?

我的字符串格式如下:

<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种类型的数组元素:

  • 使用&lt;&gt;
  • 的字符串
  • 使用{}
  • 的字符串
  • 其他两个选项之间的任何其他内容作为单独的元素。

这是我到目前为止所拥有的:

preg_match_all("/<[^>]*>|{(.*?)}|(\(.*?)\)/", $input_lines, $output_array);

我需要一些最后一个选项的帮助,在两者之间捕获字符串。 http://www.phpliveregex.com/p/kdW

1 个答案:

答案 0 :(得分:3)

使用带有PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY标记的preg_split和以下正则表达式:

'~(<[^<>]*>|{[^{}]*})~'

请参阅regex demo。它匹配并捕获到第1组两种类型的子串:

  • <[^<>]*> - <后跟0 {+ 1}}和<以及>
  • 以外的0个字符
  • > - {[^{}]*}后跟0 {+ 1}}和{以及{
  • 以外的0个字符

}将包含所得到的数组中的所有匹配项。 }将删除不必要的空元素。

请参阅PHP demo

PREG_SPLIT_DELIM_CAPTURE