簡體   English   中英

用於分隔字符串的PHP preg_match_all正則表達式

[英]PHP preg_match_all regex for deviding a string

任何人都可以幫我完成我的正則表達式嗎?

我的字符串格式如下:

<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_splitPREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY標志和以下正則表達式:

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

請參閱正則表達式演示 它匹配並捕獲到第1組兩種類型的子串:

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

PREG_SPLIT_DELIM_CAPTURE將包括生成的數組中的所有匹配項。 PREG_SPLIT_NO_EMPTY將刪除不必要的空元素。

查看PHP演示

$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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM