0

我被困在另一个正则表达式上。

样本输入:

project description

我想写正则表达式。如果找到单词“description”并且其前面有单词“project”,则在“project description”前面加上“<project>”。

预期输出:

<project>project description

我写了以下正则表达式,n 替换字符串,但它不起作用:正则表达式:((?<=project) description) 和替换字符串:<project_description>$0

使用当前的正则表达式和替换字符串,我得到以下输出:

project<project> description

任何人都可以提出一些建议吗?


**

编辑问题

** 好的,我想我对告诉人们我到底想要什么还不够清楚。

为了使问题更通用和更清晰,我将换一种说法。

如果“y”出现在“x”之后,则<tag>添加到 xy 之前。

是否可以使用正则表达式来做到这一点?

4

3 回答 3

3

我不明白你为什么要为此使用lookbehind - 你可以这样做:

/project description/  ->  <project>$0

在 PHP 中,这将是

echo preg_replace('/project description/', '<project>$0', $str);
于 2009-10-26T12:35:23.913 回答
2

扩展 Greg 的正则表达式以匹配新添加的案例:

/Details\sof\sproject|project(\sdescription|s\sundertaken|\(s\)\ssummary)/

//replace all the matches with

<project>$0

您可以稍后使用|.


编辑:回答If "y" comes after "x", then prepend <tag> to xy.

替换/x\s\y/<tag>$0

这将针对<tag>所有出现的 x-space-y

于 2009-10-26T13:45:04.053 回答
1

编辑答案:

这似乎不适合向后看。你为什么不直接替换整个东西,像这样:

s/(project|other|word) description/<project>$1 description/

这会将单词<project>添加到任何project,otherword如果它后面跟着description.

于 2009-10-26T12:37:04.233 回答