gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-10-31 23:15:38 25 4
gpt4 key购买 nike

任何人都可以帮助完成我的正则表达式吗?

我的字符串格式如下:

<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

最佳答案

使用 preg_split PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY标志和以下正则表达式:

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

参见 regex demo .它匹配并将两种类型的子字符串捕获到组 1 中:

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

PREG_SPLIT_DELIM_CAPTURE将所有匹配项包含到结果数组中。 PREG_SPLIT_NO_EMPTY将删除不必要的空元素。

参见 PHP demo :

$s = '<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>';
$res = preg_split('~(<[^<>]*>|{[^{}]*})~', $s, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
print_r($res);

关于用于分割字符串的 PHP preg_match_all 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44198041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com