2009-10-26 115 views
0

我被困在另一个RegEx中。如何使用lookbehead或lookahead并替换匹配的字符串?

样品输入:

project description 

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

预期输出:

<project>project description 

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

利用当前的正则表达式和替换字符串即时得到以下输出:

project<project> description 

任何人都可以建议什么?


**

EDITED问题

** 好吧,我想我不够明确告诉人们什么正是我想要。

为了使问题更具通用性和更清晰,我将以另一种方式进行阐述。

如果“y”在“x”之后,则将<tag>加上xy。

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

回答

1

EDITED答:

这看起来不太合适。你为什么不只是更换了整个事情,就像这样:

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

如果后面description这将预先准备的话<project>任何的projectother,或word

+0

其实,我提到的文字只是一个示例文本。实际上,文本可以是以下任何形式:1)项目细节或2)项目摘要或3)项目或4)项目承担。对于上述所有我想要预先这些词。 – Shekhar 2009-10-26 13:09:36

+1

编辑问题并添加这些条件。 – Amarghosh 2009-10-26 13:35:35

+0

@Amarghosh, 无法提供文件中可能存在的所有文本,因为即使我不知道后面阶段会发生什么。 为了使问题更为通用和更清晰,我将以另一种方式提出 如果“y”出现在“x”之后,则将加上xy。 使用正则表达式可以做到这一点吗? – Shekhar 2009-10-26 13:49:39

3

我不明白为什么您使用的是回顾后的这一点 - 你可以这样做:

/project description/ -> <project>$0 

在PHP中,这将是

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

格雷格嗨,文字:我提出的问题只是一个示例文本。实际上,文本可以是以下任何形式:1)项目细节或2)项目摘要或3)项目或4)项目承担。对于上述所有我想要预先这些词。 – Shekhar 2009-10-26 13:04:58

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

这将prepent <tag>为x空间-Y的所有出现

相关问题