0
我試圖重寫純文本搜索查詢以匹配我們的搜索引擎使用的內部格式,並且我想用一些正則表達式替換某些單詞,但是隻有當原始文本沒有用雙引號封裝時。這就是我的意思是:PHP的正則表達式 - 替換不包含在引號中的文本
rock from adelaide
將成爲rock location:adelaide
beep "rock from adelaide" boop
仍將beep "rock from adelaide" boop
find me some rock from "adelaide"
將成爲find me some rock location:"adelaide"
is there "any rock from adelaide please", thanks
將保持is there "any rock from adelaide please", thanks
我這樣一個正則表達式小白和無論我閱讀和研究多少,我都無法想象在這裏解決方案。我可以輕鬆地進行搜索並更換單詞from
,但只有匹配的外部引號完全超出了我的意思。
這是我到目前爲止,但顯然它不工作:
<?php
$pattern = '%(*ANY)(.*?(")(?(2).*?")(.*?))*?from %s';
$replace = '\1location:';
$subject = 'find me some rock from adelaide but not "rock from perth"';
print preg_replace($pattern, $replace, $subject);
?>
預期輸出是:
find me some rock location:adelaide but not "rock from perth"
實際的輸出是:
find me some rock location:adelaide but not "rock location:perth"
Tha你爲你的時間!
謝謝,這工作完美,我真的很感謝你的幫助。儘管爲了掌握這些知識,但我仍然非常有興趣知道是否有正則表達式可以做同樣的事情。 – sdmtr
將很難,因爲正則表達式模式不知道這個字符串是否在之間。從'$ test'變量:''來自perth的''和'「xxxxxxx」'之間有雙引號,但是xxxxxxx實際上並不在兩者之間:)如果有一種方法,我會驚訝於同一時間。 – sunshinejr