php - 为什么这个标准的正则表达式不能在 PHP ereg 函数中工作

标签 php html regex

我是 Reg Ex 的新手,并不完全理解不同风格之间的区别。但是,我有一个基本的 Reg Ex,当我通过 UNIX 系统(vi 和 grep)尝试它时它可以工作,但当我尝试在 PHP 的 ereg 函数中使用它时却不能。我怀疑 PHP ereg 函数有什么不同导致它不起作用:

<?php
$string = 'Feugiat <em>hendrerit</em> sit iriuredolor aliquam.';
$string = ereg_replace("<em\b[^>]*>(.*?)</em>","\\1",$string);
echo $string;
?>

我想输出 Feugiat hendrerit sit iriuredolor aliquam. 没有 em 标签。然而,它只返回一个空字符串。

最佳答案

您可能需要转义反斜杠:

$string = ereg_replace("<em\\b[^>]*>(.*?)</em>","\\1",$string);

这是因为 \b在 PHP 字符串中表示不同于 \b 的内容在正则表达式中。使用 \\在 PHP 字符串中通过一个反斜杠传递给 ereg_replace() .这与您需要在替换字符串 "\\1" 中使用双反斜杠的原因相同。 .

根据您的应用,您可能还需要考虑输入 $string 的可能性不包含任何 <em>标签。在那种情况下,上述语句将产生一个空字符串,这可能不是您想要的。

关于php - 为什么这个标准的正则表达式不能在 PHP ereg 函数中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/375563/

相关文章:

php - 如何生成动态网址以防止直接下载?

php - 在我的 php 脚本中,我与服务器的连接有效,但我的 sql 查询不起作用

php mailgun 错误意外)

javascript - 文本未按正确顺序显示

javascript - 表中的第 N 个 child 不工作 Javascript

php - 为什么以下代码返回 11 月的第二个星期五,但返回 12 月的第一个星期五?

javascript - 解决 Google Chrome 29 中 Canvas 崩溃的问题

java - 正则表达式重用一个模式来捕获多个组?

regex - 有什么好的技巧可以帮助记住 RegEx?

javascript - 不要将数字或单词替换为下划线,而是保留破折号并删除其周围的空格