2013-04-01 65 views
0

我有类似下面,我需要运行上的preg_replace内容:PHP的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); 

我遇到的问题是,正则表达式不抓住连字符或省略号。我从另一位开发人员那里继承了这段代码,所以我非常愿意把它重新编译并重新开始,但是如果可以的话,我想尽量让它工作。

回答

0

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

+0

这并获得成功的感谢! – micahmills

0

连字符不会被转义,正则表达式不会扫描句点。

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

1

该正则表达式只是似乎有很多不必要的问题。正如奥塔拉所说的那样,传染病并没有逃脱,管道也没有逃脱,也没有寻找时间。它也有两个连字符的检查。

你应该简单地寻找所有非管道字符,直到达到管简化它:

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