2016-10-20 54 views
2

我有一個文本文件是這樣的:如何使用preg_replace替換雙單引號之外的文本?

ip_rule '100 120 16.54' 
qos_rule '8074 4462' 
info 'Updated on 2015' 

而且我希望該文本是這樣的:

ip_rule='100 120 16.54' 
qos_rule='8074 4462' 
info='Updated on 2015' 

所以,只替換空間''外,並更改爲等號=。我怎麼用PHP做到這一點,我試着用str_replace來代替它們,但它取代了整個空間。

+0

謝謝,它的作品! – hillz

+0

逐行讀取文件並僅替換第一個空格。 –

回答

1

您可以使用(*SKIP)(*FAIL)跳過的規則。例如,在當前的例子,這將跳過單引號裏的東西,然後找任何水平空間(如果可以有多個,它應該只與一個= s內更換使用+量詞):

'.*?'(*SKIP)(*FAIL)|\h 

演示: https://regex101.com/r/umaQdY/1

PHP用法:

echo preg_replace("/'.*?'(*SKIP)(*FAIL)|\h/", '=', "ip_rule '100 120 16.54' 
qos_rule '8074 4462' 
info 'Updated on 2015'"); 

PHP演示:https://eval.in/663922

您可以在這裏閱讀更多關於此,http://www.rexegg.com/regex-best-trick.html#pcrevariation

+0

我覺得在這種特殊情況下這可能有點矯枉過正。只要'preg_replace(「/ ^(\ S +)\ s +(。*)$/m」,「$ 1 = $ 2」,$ input)'就可以。 –

+0

@NiettheDarkAbsol是的,那會更有效率。我不確定OP是否有其他格式。我的解決方案是解決「雙單引號之外的文本」問題。如果這是靜態格式,可以使用'str_replace(「'」,「='」,$ string);'。 – chris85