0

I am trying to create a regular expression that can parse both variables ($src and $src1) and get the result of Prop, Nam and Tra. (Ignoring any information after).

<?php
    $src = "{{Data#Prop=11a|Nam=33a|Tra=46b}}";
    $src1 = "{{Data#Prop=11a|Nam=33a|Tra=46b|extra=384v}}";

    preg_match_all('/\{\{Data#Prop\=([a-z 0-9]*)\|Nam\=([a-z 0-9]*)\|Tra=([a-z 0-9]*)????\}\}/Umis', $src, $st);
    ?>

For both $src and $src1 the script should return $st[0] = 11a; $st[1] = "33a"; $st[2] = "46b;


I need to put a expression where the question marks are '????' that optionally looks for '\|(.*)'
If I include '\|(.*)' $src1 works but $src doesn't work, if I remove '\|(.*)' $src works but $src1 doesn't work.

2
Contributors
1
Reply
2
Views
6 Years
Discussion Span
Last Post by petr.pavel
0

Hi AntiQuark,
the first array item will always contain the whole captured area so for getting the individual parts, you need to start with key 1.

In your case I would try simplifying the regexp by making it more universal. Let's say it's a sequence of key=value separated with |.

For parsing it I would use (not tested)
\{\{([^=]+=([^\|\}]+)[\|\}])+\}

It says:
1. starts with {{
2. ignore until =
3. then capture everything up to | or }
4. repeat 2. and 3.

You would then need to process the $st array and keep only what you want.

For testing regular expressions, try the java applet here:
http://myregexp.com/
I use this software as an Eclipse plugin.

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.