php - Quantifier range not working in lookbehind -


okay i'm working on project need regex can match * followed 1-4 spaces or tabs , followed row of text. right i'm using .* after lookbehind testing purposes. can match explicitly 1, 2, or 4 spaces/tabs not 1-4. i'm testing against following block

*    test line here *   second test *  third test * test 

and these 2 patterns i'm testing (?<=(\*[ \t]{3})).* works expected , matches 2nd line, same if replace 3 1, 2 or 4 if replace 1,4 forming following pattern (?<=(\*[ \t]{1,4})).* no longer matches of rows , can't understand why. i've tried googling without success. i'm using g(lobal) flag.

php, many flavors, doesn't support variable length lookbehind. support alternation (|) @ top level of lookbehind. ? can break pattern. alternative use:

(?<=\*[ \t]|\*[ \t]{2}|\*[ \t]{3}|\*[ \t]{4}).* 

or better, abort lookbehind group:

\*[ \t]{1,4}(.*) 

this should work you, since doesn't seem have overlapping of matches anyway.

from manual:

the contents of lookbehind assertion restricted such strings matches must have fixed length. however, if there several alternatives, not have have same fixed length. (?<=bullock|donkey) permitted, (?<!dogs?|cats?) causes error @ compile time. branches match different length strings permitted @ top level of lookbehind assertion.

source: http://www.php.net/manual/en/regexp.reference.assertions.php


Comments

Popular posts from this blog

python - Scipy curvefit RuntimeError:Optimal parameters not found: Number of calls to function has reached maxfev = 1000 -

c# - How to add a new treeview at the selected node? -

java - netbeans "Please wait - classpath scanning in progress..." -