我現在的模式是這樣的:PHP正則表達式匹配或者或不使用支架一個字?
pattern=("/(.*)(\bIf you want\b)(.*)/iu");
但隨着:
preg_replace($pattern, '$1*$2*$3', $result);
所以這三個部分必須更換,因爲它們是由$ 1,$ 2和$ 3,但我想允許一些更大的靈活性這樣我就可以檢測出例如這兩行:
If you want
If I want
所以我可以簡單地這樣做:
pattern=("/(.*)(\bIf (I|you) want\b)(.*)/iu");
但因爲我需要更換$ 1,$ 2和$ 3中產生了一個問題。該模式是動態插入,因此都不同:
$pattern = "/(.*)(\b".$value."\b)(.*)/iu";
的$值有時也有像上面的例子修飾符「如果(你|我)希望」,但其他的模式可能是簡單地「接下來發生的事情」沒有修飾符。所以額外的括號會導致一個問題,但我找不到另一種方法來做到這一點。
編輯:請注意,這裏的問題是$ 1,$ 2和$ 3都的preg_replace。有了這樣
"/(.*)(\bwhat happened next\b)(.*)/iu"
模式這個經過精細,但像
"/(.*)(\bIf (I|you) want\b)(.*)/iu"
額外的支架也不會以$ 1,$ 2和$ 3都的preg_replace正常更換。
而且我知道它可以像這樣
If you want|If I want
但它不是特別雄辯做!
您的意思是'$ value'是否可以包含用戶定義的模式?你不能使用非捕獲組 - 「」/(.*)(\bIf(?:I | you)want \ b)(。*)/ iu「' –
不確定你的意思。問題出現在preg_replace中,它將三個括號內的查詢替換爲$ 1,$ 2和$ 3。如果你添加另一個支架*有時*,那麼它顯然不能正常工作。這就是爲什麼我需要這樣做可能沒有括號......或者必須有其他方式。 – Hasen
你想要從字符串的開始到匹配,然後是匹配,然後是匹配後的文本?你期望一個字符串中的單個匹配嗎? –