爲什麼preg_replace在字符串中只替換一次搜索到的字符串?PHP preg_replace在字符串中只替換一次
我有一個字符串「Hello ------ World」。
我用這個
preg_replace('#--#', '-', 'Hello------World');
不過的preg_replace返回 「你好---世界」。因此,它取代了第一次發生,並繼續不檢查是否還有任何發生 - 如何讓「Hello ------ World」變成「Hello-World」?
爲什麼preg_replace在字符串中只替換一次搜索到的字符串?PHP preg_replace在字符串中只替換一次
我有一個字符串「Hello ------ World」。
我用這個
preg_replace('#--#', '-', 'Hello------World');
不過的preg_replace返回 「你好---世界」。因此,它取代了第一次發生,並繼續不檢查是否還有任何發生 - 如何讓「Hello ------ World」變成「Hello-World」?
你所看到的是正確的行爲。正則表達式匹配兩個破折號,用一個代替,然後搜索。再次找到兩個破折號,用一個代替。所以六個破折號將成爲三個破折號。
的解決方案將是匹配多個短劃線,然後用一個短劃線代替:
preg_replace('#--+#', '-', 'Hello------World');
在正規表達式將匹配的至少一個劃線的+
,但匹配儘可能多的那些字符儘可能的。更具體地說,它匹配所有破折號,直到字符串中出現非破折號。因此,它現在將找到所有六個破折號,用一個破折號代替它們,並搜索以找到更多破折號。
我認爲你需要爲正則表達式添加一個全局標誌,否則它只匹配字符串的第一個出現。 like preg_replace('# - #/ g',' - ','Hello ------ World');或東西
-1 JS!= PHP;) – NikiC
@NikiC這不會在JS中工作,請參閱我的答案爲什麼。 – Joost
@Joost我知道;)只是說在PHP中沒有g修飾符,所以這隻會引發錯誤。 – NikiC