2017-09-04 17 views
0

這個問題讓我發瘋。比方說,我有一個字符串:PHP:如何刪除2個字符的字符串中的部分而不刪除太多?

This is a &start;pretty bad&end; string that I want to &start;somehow&end; display differently 

我希望能夠去除&start;和&end;部分以及兩者之間的一切,以便它說:

This is a string that I want to display differently 

我嘗試使用的preg_replace用常規表達,但它起飛太多,即:

This is a display differently 

的問題是:如何刪除只是套&start;和012之間的東西雙並確保它不會刪除任何&end;和&start;段之間什麼?

請記住,我與數百名字符串是非常不同的對方,所以我正在尋找一個靈活的解決方案將與他們的工作,工作。

預先感謝任何與此幫助。

編輯:替換美元符號&符號與。哎呀!

+0

沒有什麼RE你試試?從匹配的字符串中排除$或至少搜索它非貪婪是很重要的。 – eckes

+0

@eckes我試過,但它確實是我的問題時說(花太多關閉):'/ \ &start; [^>] + \ &end; /'' – user1413341

+0

[^ $] +'排除$?。 (不知道美元或&符號是否正確,你提到了兩者)。如果你添加?它甚至會非貪婪(但其中一個就足夠了) – eckes

回答

2

試試這個正則表達式/\&start;(.+?)\$end;/g

它看起來像它的工作原理是期望:https://regex101.com/r/MW5nom/2

+1

爲什麼'\&'? '&'不是'regex'中的元字符。 – axiac

+1

我剛剛修改了用戶正則表達式。它似乎與'\&'一起工作,但是你是正確的,我相信它可能只是'&' –

1

我趕緊用JS試過了鍍鉻的控制檯上,試圖將其轉換成PHP:

"This is a &start;pretty bad$end; string that I want to &start;somehow$end; display differently".replace(/\&start;(.+?)\$end;/g, "")