2016-06-01 100 views
0

部分我有一個字符串:刪除字符串的從開始到某些字

$s = "I am not foo+bar"; 

我想刪除的$s從字符串的開頭開始的第一部分,直到字"foo+"所以就變成了「 我不是foo + 欄」:

$s == "bar" 

我怎樣才能做到這一點用PHP?

編輯:我在字符串中有一個「+」號。爲什麼preg_replace沒有取代它?我用過的模式是/^(.*?\bfoo+)\b/。有任何想法嗎?

+0

你嘗試過什麼,什麼沒有奏效?你看過php字符串函數嗎?特別是str_replace和strpos - http://php.net/manual/en/ref.strings.php – theatlasroom

+0

我做了,但我無法弄清楚如何在我想刪除的部分包含單詞「foo」! –

+0

如果沒有看到您嘗試過的代碼,無法真正幫助您。使用您嘗試過的一些代碼無法更新問題。另一種方法可能是使用以空格作爲分隔符的分隔符來將字符串拆分爲數組,然後比較數組中的每個元素,然後將剩下的內容重新插入到字符串中。 – theatlasroom

回答

2

你應該能夠使用正則表達式來查找一切,直到某個單詞。對於你的例子,

/^(.*?\bfoo)\b/ 

應與preg_replace一起使用。
^確保我們從字符串的開頭開始。
.*?是任何東西(不包括新行加上s修飾符以允許新行),直到第一個foo

簡而言之:\ b允許您以\ bword \ b的形式使用正則表達式執行「僅限整個詞」搜索。 「單詞字符」是可以用於形成單詞的字符。所有不是「單詞字符」的字符都是「非單詞字符」。

- http://www.regular-expressions.info/wordboundaries.html

正則表達式演示:使用preg_quotehttps://regex101.com/r/gJ3nS7/3

粗糙未經檢驗的替代例子。

preg_replace('/^(.*?\b' . preg_quote('foo', '/') . '\b/', '', $s); 

更長例如+是一個特殊的性質,而且是一個非字字符,這樣\b將無法​​正常工作尾隨。你可以把+放到一個可選的分組中,邊界詞應該可以工作。

https://regex101.com/r/gJ3nS7/5

/^(.*?\bfoo(?:\+|\b))/ 
+0

你不需要使用正則表達式來處理所有事情。此外,問題要求「foo」的位置,而不是「bar」 –

+0

@RobbieAverill沒關係,反轉這個詞。正則表達式仍然需要。根據你的回答,你沒有找到第一個「foo」作爲單詞https://eval.in/580864。 – chris85

+0

然後在兩邊找空格來替代,你不需要正則表達式:) https://eval.in/580865 –

相關問題