2014-07-05 111 views
0

我在字符串中有很多(頁#)像(第13頁)(第234頁),我想刪除它們。我用以下模式匹配,但它不起作用匹配以下模式

preg_replace('/\(p\.*\)/','',$string); 

(to escape (
p is p 
\. to escape . 

我需要一些幫助在這裏。謝謝。

回答

1

這是你要找的正則表達式:

\(p\.\s+\d+\) 

或者,在你的代碼:

preg_replace('/\(p\.\s+\d+\)/', '', $string); 

這裏有一個fiddle

+0

謝謝你這麼多小提琴!我發現HTML中的空格是 ,所以我將模式更改爲\(p \。  + \ d + \)。一切都設定好了。 –

1

您的正則表達式中沒有任何符合頁碼的內容。你只是匹配像(p.......)

preg_replace('/\(p\.\s*\d+\s*\)/', '', $string); 
0

*表示匹配0個或多個前面的項目,所以它會在工作。在你的例子中的字符。也許你會需要這樣的東西:

preg_replace('/\(p\. ?[0-9]+\)/','',$string); 

此相匹配:?

  • (P
  • 一個空格,該使可選
  • 然後一個或多個數字0-9,由於+
  • 然後)

希望這有助於

0

首先,在所有preg_replace是一個函數,而不是一個程序,如果你想看到的任何變化,你需要寫:

$str = preg_replace($pattern, $replacement, $str); 

在你的模式,你寫\.*這意味着文字。零次或多次,我認爲這不是你想要的。我假設你想寫一個文字\..*。和零個或多個字符。但這不起作用,原因有兩個:它不檢查字符是否是數字,並且因爲量詞是貪婪的,所以.*將匹配所有字符,直到行尾並且將回溯到最後一個括號。

的好辦法可能是,檢查至少有一個數字(使用+量詞)或相同的多個constraignant(不含空格可變數量)Barmar模式:

/\(p\. \d+\)/