如何使用lookbehind或lookahead并替换匹配的字符串?

时间:2009-10-26 12:29:53

标签: regex lookbehind

我再遇到一个RegEx。

示例输入:

project description

我想写RegEx。如果找到单词“description”并且其前面带有单词“project”,则在“< project>”之前添加“project description”。

预期产出:

<project>project description

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

使用当前正则表达式和替换字符串即可获得以下输出:

project<project> description

有人可以提出建议吗?


**

  

编辑问题

** 好吧,我觉得我不太清楚告诉别人我想要什么。

为了使问题更通用和更清晰,我将以另一种方式提出。

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

是否可以使用正则表达式执行此操作?

3 个答案:

答案 0 :(得分:3)

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

/project description/  ->  <project>$0

在PHP中,这将是

echo preg_replace('/project description/', '<project>$0', $str);

答案 1 :(得分: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

这将为所有出现的x-space-y

预先<tag>

答案 2 :(得分:1)

编辑回答:

这似乎不适合外观。你为什么不直接替换整个事情:

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

如果后跟<project>,则会在projectotherword之前添加description字。