[英]Replace a repeating pattern using regex
我想在源代碼中替換所有未引用的數組鍵:
$array[keyValue]
引用的數組鍵:
$array['keyValue']
對於單維數組,這個正則表達式允許我這樣做:
preg_replace('/\$([a-z-_0-9]+)(\[([a-z][a-zA-Z-_0-9]+)\])+/', '\$$1['$3']', $input_lines);
測試: https : //www.phpliveregex.com/p/pXc
請注意我的所有鍵都以小寫字母開頭。
當我有多維數組並且我想要改變時,我的問題出現了:
$array[keyValue1][keyValue2]
至 :
$array['keyValue1']['keyValue2']
甚至
$array[keyValue1]...[keyValueN]
至
$array['keyValue1']...['keyValueN']
對於較大尺寸的數組。 我做多次匹配模式的嘗試最終在第一個開口括號[
和最后一個]
匹配作為一個匹配。
編輯:執行此操作的原因是為了避免錯誤和通知
E_NOTICE : type 8 -- Use of undefined constant key - assumed 'key' -- at line 2
在我的日志中
注意:注意預定義的常量。 這不會也不能忽略它們。
您需要使用\\G
進行連續匹配。 將preg_replace
與以下正則表達式一起使用:
(\$\w+\[|\G(?!\A)\[)([^]['"]+)\]
並將以下字符串作為替換字符串:
$1'$2']
PHP代碼:
preg_replace('~(\$\w+\[|\G(?!\A)\[)([^][\'"]+)\]~', '$1\'$2\']', $str);
正則表達式崩潰:
(
開始捕獲組#1
\\$\\w+\\[
匹配$
然后是一些單詞字符然后是一個左括號 |
要么 \\G(?!\\A)
從上一場比賽結束的地方開始比賽 \\[
匹配一個開口括號 )
捕獲組#1結束 (
開始捕獲組#2
[^]['"]+
匹配[
, ]
, '
和"
)
捕獲組#2結束 \\]
匹配一個結束括號
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.