正则表达式 – 替换除URL / URI之外的单词
为Web应用程序编写全球化模块,我需要一个regexp来替换一个单词的所有实例与另一个单词(翻译) – 除了 – 在URL / URI中找到的单词。
编辑:我忘了提到我使用Ruby,所以我不能使用’Lookbehind’
- 拆分URI正则表达式; 在结果中包含URI。
- 每件作品:
- 如果是URI,请不要管它
- 否则,做单词替换
- 加入这些作品
码:
# From RFC 3986 Appendix B, with these modifications: # o Spaces disallowed # o All groups non-matching, except for added outermost group # o Not anchored # o Scheme required # o Authority required URI_REGEX = %r"((?:(?:[^ :/?#]+):)(?://(?:[^ /?#]*))(?:[^ ?#]*)(?:\?(?:[^ #]*))?(?:#(?:[^ ]*))?)" def replace_except_uris(text, old, new) text.split(URI_REGEX).collect do |s| if s =~ URI_REGEX s else s.gsub(old, new) end end.join end text = < LINKED-LIST http://www.stackoverflow.com LINKED-LIST # => LINKED-LIST http://www.somewhere.come/stack?stack=stack#stack LINKED-LIST
你可以使用类似的东西
(?
但这可能并不完美,它只是看起来这个词没有出现在单个非空白字符串中,而这些字符串没有://
在单词之前的某个地方。
PS Home:\> "foo foobar http://foo_bar/baz?gak=foobar baz foo" -replace '(?
您是否尝试将文本拆分为单词并迭代单词? 然后你可以检查每个单词,确定它是否是一个URI,如果不是则翻译它。