2012-07-17 121 views
1

我想從一個更大的字符串($ str)中取出GP123(一個由數字和字符組成的字符串),並排除將成爲另一個變量中的字符串的Hello($ str1)。 我的代碼是這樣的。但它不起作用。我怎樣才能刪除一部分字符串。如何在php中使用preg刪除一部分字符串?

$str=" HelloGP123"; 
$str1="Hello"; 
preg_match_all("/(?:$str1)\w+\d+\w+/",$str,$str2); 
print_r($str2); 
+1

'preg_replace()'? – Spudley 2012-07-17 06:46:51

+0

所以你想要返回一個僅由字母數字字符構成的子字符串數組,但要排除忽略正在搜索的文本中給定字符串的任何部分的子字符串? – Braiba 2012-07-17 07:53:19

+0

是的,我只是想要GP123作爲$ str2並排除你好。如何從$ str – 2012-07-17 09:01:31

回答

1

東西線內爆你的比賽以及我的需要只是擦除$ str(HelloGP123)中的$ str1(Hello)部分並將最後的餘數存儲在$ str2中。而我正在圍繞正則表達式。

但我意識到這可以通過字符串替換更簡單的方法解決。 所以這就是我所做的,它的工作。

$str2= str_ireplace($str1, '', $str); 

我想這是最簡單的方法比通過嘗試各種組合的正則表達式衝刺我們的大腦。

0
preg_replace("/hello/","","hellogp123"); 

爲什麼不上呢?

+0

中否定$ str1但是,如何使用變量來執行此操作。這個作品我知道,但假設我不知道GP123之前的術語Hello,但我知道它是變量$ str1的內容。然後 ?給模式賦一個變量不起作用 – 2012-07-17 09:25:40

+0

它會工作,請檢查以下代碼:$ str =「hello」; echo preg_replace(「/ $ str /」,「」,「hellogp123」);' – venkat 2012-07-17 14:21:29

0
$pattern = sprintf('/(?<=%s)[a-zA-Z0-9]+/', preg_quote($str1, '/')); 

if (preg_match($pattern, $str, $matches)) { 
    $str2 = $matches[0]; 
} 

這將匹配的字母和/或數字,但只有那些包含在$str1字符串緊隨其後的任意組合。這裏

示例 - http://codepad.viper-7.com/okY8TP

參見 - http://www.regular-expressions.info/lookaround.html

+0

不,我不想取代GP123但排除包含在變量$ str1中的Hello。新的結果,即GP123應該存儲在$ str2中。再次查看我的代碼。 – 2012-07-17 09:04:03

+0

@AlokKumar我已經更新了我的答案和工作示例 – Phil 2012-07-17 10:35:02

0
$string="HelloGP123"; 
$pattern="/Hello/"; 
echo preg_replace($pattern, "", $string); 
+0

但我該如何處理變量。這個作品我知道,但假設我不知道GP123之前的術語Hello,但我知道它是變量$ str1的內容。然後 ?爲模式賦予變量不起作用 – 2012-07-17 09:24:45

0

有你的代碼不能正常工作的幾個原因:

  • 首先(?:$str1)實際上是試圖匹配'你好'在字符串中。這是因爲(?:)是一個非捕獲子模式,其中不是意味着結果中的任何內容都不會返回(這似乎是您如何使用它),但子模式不返回作爲它在比賽數組中的自己的條目。
  • \w+\d+\w+表示「一個或多個單詞字符,後跟一個或多個數字,後跟一個或多個單詞字符」,其中「單詞」字符是字母,數字或下劃線。這不是你說你想要匹配的東西。

下面是一些代碼,會做你說的話:

$str_minus_str1 = preg_replace('/'.preg_quote($str1,'/').'/',' ',$str); 
preg_match_all('/[0-9A-Za-z]+/',$str_minus_str1,$matches); 

請注意,我把它換成$ STR1與「」的字符串,而不是刪除它,因爲如果$海峽是,例如,「applehellobanana」,你會想把'apple'和'banana'作爲單獨的匹配返回,而不是僅僅匹配'applebanana'。

如果你想返回整個事情作爲一個單一字符串,這似乎是你的意圖,那麼你就需要沿着

$str2 = implode('',$matches);