Hi I'm currently working with a project in which the following occurs;
$example = $array[key]
instead of
$example = $array['key'] or $example=$array["key"]
I'm trying to use regex to update these old array key strings. I currently have the following;
(\$([a-z0-9_]*)\[(?!('|"))([a-z0-9_]*)(?!('|"))\])
This matches $array[key], but also matches things like this;
$array[]$array inside a javascript tag.
The code is also very old and has script tags inside php files, without a framework.
I'm using regex inside Notepad , does anyone think they could write me a regex query to capture non string array keys and avoid $array[], $array[$variable] and $array inside script tags, and replace them with quotes?
Thank you
CodePudding user response:
You can use
Find What: (?s)<script\b[^>]*>.*?</script>(*SKIP)(*F)|\$(\w )\[(?!\d ])(\w )]
Replace With: $$1["$2"]
Details:
(?s)- now,.matches newnlines<script\b[^>]*>- an openscripttag.*?- any zero or more chars as few as possible</script>- closing</script>tag(*SKIP)(*F)- fail the match and go on to search for the next one from the failure position|- or\$- a$char(\w )- Group 1: any one or more word chars\[- a[char(?!\d ])- a negative lookahead that fails the match if there are one or more digits and]immediately to the right of the current location(\w )- Group 2: one or more word chars]- a]char.
CodePudding user response:
This seem to work fine for me:
\$[a-zA-Z0-9_] \[[a-zA-Z0-9_] \]

