0

我有如下内容,我需要在其上运行 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);

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

4

3 回答 3

1

那个正则表达式似乎有很多不必要的问题。正如 Otala 所说,hypen 没有转义,管道没有转义,它也没有在寻找句号。它还对连字符进行了两次检查。

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

preg_replace("/([^|\r\n]+)\|/", '<h3 id="${1}">${1}</h3>', $content);
于 2013-04-01T18:45:54.983 回答
0

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

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

于 2013-04-01T18:41:52.730 回答
0

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

于 2013-04-01T18:45:42.970 回答