我有一個PHP數據庫配置文件(在支持PCRE的代碼編輯器中打開),其中包含用于生成連接字符串的各種引擎憑據。
現在,正如我在問題標題中提到的,我想匹配某些字符串"DB_DATABASE",前提是在n行(假設3行)之前存在如下所示的“mysql”:
....
....
'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'anydb'),
....
....
如果我在3行之前說,那么它不應該與4行之前的“mysql”匹配,即它不應該與'mysql' => [
匹配。請注意,除了這里提到的數據庫引擎連接細節之外,還有其他的數據庫引擎連接細節,因此需要匹配mysql,并且僅當它正好出現在DB_DATABASE
上方的3行時。
我嘗試了一些復雜的正則表達式,但沒有一個能滿足我的需求,讓我提一提我認為最接近的正則表達式,但徒勞無功:
^[\S\s]*?mysql\S*$(?:\n.*){3}\S*DB_DATABASE
感謝所有努力幫助解決此問題的人。。。
我建議將單詞作為整個單詞進行匹配,并使用
\K
運算符僅使用DB_DATABASE
字符串:請參閱regex演示。細節:
\bmysql\b
-一個完整的單詞mysql
.*
-行的其余部分(?:\n.*){3}
-三行\n
-新行.*
-除換行符以外的任何零個或多個字符,盡可能多\K
-匹配重置運算符,用于從匹配內存緩沖區中刪除到目前為止匹配的文本\bDB_DATABASE\b
-一個完整的單詞DB_DATABASE
。注意:如果您的行尾是混合的或未知的,您應該將模式中所有出現的
\n
替換為\R
(\R
匹配任何行尾序列)。