Php preg_replace可标识年份,并添加wiki代码链接年份

Php preg_replace可标识年份,并添加wiki代码链接年份,php,regex,preg-replace,Php,Regex,Preg Replace,有人能帮助正则表达式正确识别每边带空格的4位数字吗 我有一个记录历史和时间线的维基。其想法是识别年份,每边都有4位数字和空格,然后每边都添加wiki代码[[&]],这样年份就会自动变成指向其同名页面的链接。(不包括当年的页面,无需链接到自身)。我有一个半工作答案,但注意到它在和,之间自动链接了一个数字 我现在的php是;($this->GetPageTag()=wiki页面名) 因此,有问题的违规代码是; $body=preg_replace(“!(\b\d{4}\b)!”、“[[$1]]”、$

有人能帮助正则表达式正确识别每边带空格的4位数字吗

我有一个记录历史和时间线的维基。其想法是识别年份,每边都有4位数字和空格,然后每边都添加wiki代码[[&]],这样年份就会自动变成指向其同名页面的链接。(不包括当年的页面,无需链接到自身)。我有一个半工作答案,但注意到它在
之间自动链接了一个数字

我现在的php是;($this->GetPageTag()=wiki页面名)

因此,有问题的违规代码是; $body=preg_replace(“!(\b\d{4}\b)!”、“[[$1]]”、$body)


谢谢

在lookaround中将单词边界替换为空格:

 $body = preg_replace('!(?<= )(\d{4})(?= )!', '[[$1]]', $body);
$body=preg_replace(')!(?
我有一个半工作答案,但注意到它在
之间自动链接了一个数字

在以下位置进行匹配:

在字符串的第一个字符之前,如果第一个字符是单词字符。

在字符串中最后一个字符之后,如果最后一个字符是单词字符。

在字符串中的两个字符之间,其中一个是单词字符,另一个不是单词字符

这意味着,
\b\d{4}\b
匹配
1990.
字符串中的
1990

要确保在空格或字符串的开始/结束之间匹配字符串,请使用

$body = preg_replace('~(?<!\S)\d{4}(?!\S)~', '[[$0]]', $body);

$body=preg\u replace('~(?嗯,他们没有拾取任何4位数字?但是..$body=preg\u replace('!(\s\b\d{4}\b\s)!',[[[$1]],$body);这删除了其中一个空格,但缝了起来。@chrisdavies:对不起,我不明白你的意思。请编辑你的问题并添加示例文本和预期结果。没有匹配的内容可以添加方括号。@chrisdavies:正则表达式中有一个拼写错误,请参阅我的编辑。啊……没有拾取空格,但正在搜索我找到的检测空格开始工作。这里有一点合作!干杯!###2005年之前。2006年。kljlj2333lkkj[[LatLon:63.5623,-3.3829]
$body=preg_replace(')!(?使用
preg_replace('))~(?非常感谢!这就是獾!我已经在我的代码注释中添加了这个的url,因为我相信我会参考它。谢谢你的解释。
 $body = preg_replace('!(?<=\h)(\d{4})(?=\h)!', '[[$1]]', $body);
$body = preg_replace('~(?<!\S)\d{4}(?!\S)~', '[[$0]]', $body);