2014-07-05 64 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+\)/