having trouble repeated capturing group:
(?:\[)(?:(?:\s*?)([2-9aqtkj][shcd])+?(?:\s*?)).*?(?:\])
see demo
basically want match card value (as
, 8h
etc..) combinations inside square brackets only
any appreciated.
thanks
you can use regex \g
operator match multiple substrings inside [...]
:
(?:\[|(?!^)\g)\s*\k[2-9aqtkj][shcd](?=[^\]]*])
see regex demo
in short, pcre regex match text that:
(?:\[|(?!^)\g)\s*\k
- starts[
or @ end of previous successful match followed 0 or more whitespace symbols[2-9aqtkj][shcd]
- matches 2 characters each of defined sets(?=[^\]]*])
- positive lookahead checking if there closing]
ahead of current position
$re = '~(?:\[|(?!^)\g)\s*\k[2-9aqtkj][shcd](?=[^\]]*])~'; $str = "[as 4h 8s] [ 4h ] [as4h] [ 4h "; preg_match_all($re, $str, $matches); print_r($matches[0]);
Comments
Post a Comment