带有特殊字符的PHP preg_replace

时间:2013-04-01 18:34:53

标签: php regex

我有以下内容,我需要运行preg_replace:

Test Title|
test content

John's title - has a hyphen|
john's content

Last one... I promise|
last content

我在内容上使用以下preg_replace正则表达式以获取以“|”结尾的所有行并用标签包装它。

preg_replace("/([a-zA-Z][a-zA-Z-'\,-\d\s\w]+\|)/", '<h3 id="${1}">${1}</h3>', $content);

我遇到的问题是正则表达式没有抓住连字符或省略号。我从另一个开发人员那里继承了这个代码,所以我更愿意把它丢弃并重新开始,但是如果可以的话我想尝试让它工作。

3 个答案:

答案 0 :(得分:1)

正则表达式似乎有很多不必要的问题。正如奥塔拉所说,这种宣传并没有逃脱,管道也没有逃脱,也没有找到期限。它还有两个连字符检查。

您应该通过查找直到管道的所有非管道字符来简化它:

preg_replace("/([^|\r\n]+)\|/", '<h3 id="${1}">${1}</h3>', $content);

答案 1 :(得分:0)

连字符未被转义且正则表达式没有扫描一段时间。

/([a-zA-Z][a-zA-Z-'\,\.\-\d\s\w]+\|)/应该有用。

答案 2 :(得分:0)

可以简化你的正则表达式: preg_replace("/([^|\n\r]+\|\n)/", '${1}', $content);