[英]SKIP-FAIL regex with multiple patterns to ignore in one PCRE regex
我試圖將一個字符串替換為另一個字符串,但前提是該字符串必須用雙引號或單引號引起來。 我可以做雙打,但是也有單打的問題。
我將preg_repalce與array一起使用,因為我還有其他適用於字符串的規則。
$text = <<<DATA
I love php
"I love php"
'I love php'
"I" love 'php'
DATA;
$text = preg_replace(
[
'/"[^"]*"(*SKIP)(*FAIL)|\blove\b/i'
],
[
'hate'
],
$text
);
echo $text;
輸出是
I hate php -> OK
"I love php" -> OK
'I hate php' -> NOT OK
"I" hate 'php' -> OK
我的問題是單引號
您需要對要跳過的分組進行分組 ,並使用單引號的字符串文字時對單引號進行轉義:
'/(?:\'[^\']*\'|"[^"]*")(*SKIP)(*FAIL)|\blove\b/i'
^^^ ^ ^
參見regex演示 。
現在, (*SKIP)(*FAIL)
將適用於\\'[^\\']*\\'
和"[^"]*"
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.