我正在使用Google工具箱中的GTMRegex类(适用于Cocoa / Objective-C)应用程序:
http://code.google.com/p/google-toolbox-for-mac/
我需要匹配并替换字符串中的3个单词短语。我知道这个短语的第2和第3个单词,但第一个单词是未知的。
所以,如果我有:
lorem BIFF BAM BOO ipsem
和
lorem BEEP BAM BOO ipsem
我会注意匹配两者(BEEP BAM BOO)和(BIFF BAM BOO)。然后我想用粗体HTML标签包装它们。
这就是我所拥有的:
GTMRegex *requiredHeroRegex = [GTMRegex regexWithPattern:@"(\\([A-Z][A-Z0-9]*)\\b Hero Required)" options:kGTMRegexOptionSupressNewlineSupport|kGTMRegexOptionIgnoreCase];
out = [requiredHeroRegex stringByReplacingMatchesInString:out withReplacement:@"<b>\\1</b>"];
但是,这不起作用。基本上,当我不知道它时,我无法弄清楚如何匹配第一个单词。
任何人都知道RegEx会这样做吗?
更新
GTRegEx使用POSIX 1003.2 Regular Expresions,因此解决方案是:
GTMRegex *requiredHeroRegex = [GTMRegex regexWithPattern:@"([[:<:]][A-Z][A-Z0-9]*[[:>:]])( Hero Required)" options:kGTMRegexOptionSupressNewlineSupport|kGTMRegexOptionIgnoreCase];
out = [requiredHeroRegex stringByReplacingMatchesInString:out withReplacement:@"<b>\\1\\2</b>"];
请注意单词边界的疯狂语法。
更新2:这是JavaScript版本:
/(([A-Za-z]*?|[A-Za-z]*? [A-Za-z]*?)( Hero Required))/gm
答案 0 :(得分:1)
你应该使用" .*? Hero Required"
,但是,如果它是句子的开头,它将不会捕捉短语。
对于这两种情况,请使用"( .*? Hero Required|^.*? Hero Required)"
。
答案 1 :(得分:1)
将\b([a-z][a-z0-9]*)( second third)
替换为<b>\1</b>\2