匹配以下模式

时间:2014-07-05 13:52:46

标签: php preg-replace

我在字符串中有很多(p。#)喜欢(第13页)(第234页),我想删除它们。我使用以下模式进行匹配但不起作用

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

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

我需要一些帮助。谢谢。

4 个答案:

答案 0 :(得分:1)

这是您正在寻找的正则表达式:

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

或者,在您的代码中:

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

这是fiddle

答案 1 :(得分:1)

您的正则表达式中没有任何内容可以匹配页码。您只需匹配(p.......)等内容。

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

答案 2 :(得分:0)

*表示匹配前面项目中的0个或多个,因此它将处理。你的例子中的角色。也许你可能需要这样的东西:

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

匹配:

  • (第
  • 那么一个空间,哪个?使可选
  • 然后是一个或多个数字0-9,由于+
  • 然后)

希望这有帮助

答案 3 :(得分:0)

首先,preg_replace是一个函数,而不是一个过程,如果你想看到任何变化,你需要写:

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

在你的模式中你写了\.*,意思是一个文字。零次或多次,我认为这不是你想要的。我假设你想写\..* 一个文字。和零个或多个字符。但由于两个原因,这也不起作用:这不会检查字符是否为数字,并且由于*量词是贪婪的,.*将匹配所有字符,直到该行的结尾将回溯到最后一个括号。

好方法可能是Barmar模式检查至少有一个数字(使用+量词)或相同的更多约束(没有可变数量的空格):

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