Webアプリケーションのグローバリゼーションモジュールを作成していて、URL / URI内にある単語を除いて、単語のすべてのインスタンスを別の単語(翻訳)に置き換えるためのregexpが必要です。
編集:私はRubyを使用していることを言及するのを忘れたので、「Lookbehind」を使用できません
コード:
# 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 = <<END
stack http://www.stackoverflow.com stack
stack http://www.somewhere.come/stack?stack=stack#stack stack
END
puts replace_except_uris(text, /stack/, 'LINKED-LIST')
# => LINKED-LIST http://www.stackoverflow.com LINKED-LIST
# => LINKED-LIST http://www.somewhere.come/stack?stack=stack#stack LINKED-LIST
あなたはprobabyのようなものを使うことができます
(?<!://[^ ]*)\bfoo\b
://
しかし、これはおそらく完全ではありません。単語の前にどこにも存在しない文字の単一の非空白文字列に単語が表示されないように見えるだけです。
PS Home:\> "foo foobar http://foo_bar/baz?gak=foobar baz foo" -replace '(?<!://[^ ]*)\bfoo\b', 'FOO'
FOO foobar http://foo_bar/baz?gak=foobar baz FOO
テキストを単語に分割して、単語を繰り返し処理してみましたか?次に、各単語を調べて、それがURIであるかどうかを判断し、そうでない場合は翻訳します。