正则表达式添加前缀

时间:2014-01-19 22:38:23

标签: regex

我有这个字符串:

ab ab-alfa beta gamma ab-delta

我想在每个单词中添加前缀“ab-”,除了已有单词的单词“ab”(第一个单词除外)。

我的意思是,我会得到这个结果:

ab ab-alfa ab-beta ab-gamma ab-delta

你知道一个正则表达式并解释它吗?

- 修改

到目前为止,我已经尝试了这个(link):

\b(?!ab)\w+\b

但我不认为我理解否定是如何运作的。

2 个答案:

答案 0 :(得分:2)

您可以使用此正则表达式:

(?<![^ ])(?=[^ ])(?!ab)

替换ab-

(?<![^ ])(?=[^ ])将搜索单词开头的边界(定义为非空格字符序列)。

通常,给定“单词字符”C的字符类,一般的“单词边界”(类似于\b)将是:

(?:(?<!C)(?=C)|(?<=C)(?!C))

“单词”开头的边界是:

(?<!C)(?=C)

“单词”结尾的边界是:

(?<=C)(?!C)

这确保在空字符串中找不到“单词边界”,如果“单词字符”位于字符串的开头或结尾,则会找到“单词边界”。


请注意,(?<= )(?! )乍一看可能看起来像(?<![^ ])(?=[^ ])的等效模式,但是它不是,因为它无法匹配单词的开头单词出现在字符串中的索引0处。

另外,不要试图将其缩短为(?<![^ ])(?!ab| ),当字符串为空时,它会返回匹配。

答案 1 :(得分:0)

试试这个正则表达式

(?<!ab-)(?!\bab\b)\b\w+\b

这是替换字符串

ab-$&