Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 匹配以下模式_Php_Preg Replace - Fatal编程技术网

Php 匹配以下模式

Php 匹配以下模式,php,preg-replace,Php,Preg Replace,我有很多像(第13页)(第234页)这样的(第#)字符串,我想删除它们。我使用了以下模式进行匹配,但不起作用 preg_replace('/\(p\.*\)/','',$string); ( to escape ( p is p \. to escape . 我需要一些帮助。谢谢。这是您正在寻找的正则表达式: \(p\.\s+\d+\) 或者,在代码中: preg_replace('/\(p\.\s+\d+\)/', '', $string); 这是一个。您的regexp中没有与页码匹配

我有很多像(第13页)(第234页)这样的(第#)字符串,我想删除它们。我使用了以下模式进行匹配,但不起作用

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

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

我需要一些帮助。谢谢。

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

\(p\.\s+\d+\)
或者,在代码中:

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

这是一个。

您的regexp中没有与页码匹配的内容。您只是在匹配类似于
(p……)
的内容


*意味着匹配前面的0个或多个项,因此它将处理。你的例子中的角色。也许您可能需要以下内容:

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

  • (p
  • 然后是一个空间,它是可选的
  • 然后一个或多个数字0-9,由于+
  • (然后)

希望这有帮助

首先,preg_replace是一个函数,而不是一个过程,如果您想看到任何更改,您需要编写:

$str = preg_replace($pattern, $replacement, $str);
在您的模式中,您编写了
\.*
,这意味着一个文本。零次或多次,我认为这不是你想要的。我假设您想编写一个文本。和零个或多个字符。但由于两个原因,这也不起作用:这不会检查字符是否为数字,而且由于
*
量词是贪婪的,
*
将匹配所有字符直到行尾,并将回溯到最后一个括号

好的方法可能是Barmar模式,它检查是否至少有一个数字(使用
+
量词)或相同的更具对比性(没有可变数量的空格):


非常感谢你的提琴!。我发现html中的空格是空的,所以我将模式更改为(p\.+\d+)。一切都准备好了。
$str = preg_replace($pattern, $replacement, $str);
/\(p\. \d+\)/