PHP regular expression preg_match_all to highlight a string

Can someone help with filling in my regex?

I lines that are formatted as follows:

<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>

I need to split them into an array with preg_match_all to get 3 types of array elements:

  • Rows with <>
  • Lines with {}
  • Anything else between the other two options as separate elements.

Here is what I still have:

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

I need help with the last option, fixing the lines between them. http://www.phpliveregex.com/p/kdW

+4
source share
1 answer

Use preg_splitwith flags PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTYand the following regex:

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

regex. 1 :

  • <[^<>]*> - <, 0+, < >, >
  • {[^{}]*} - {, 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);
+3

Source: https://habr.com/ru/post/1677976/


All Articles