求引用字符串生成器

时间:2010-06-29 07:12:29

标签: regex language-agnostic quotes magic-quotes

有没有人知道一个免费的网站或程序,它会接受一个字符串并用适当的转义字符引用它?

比方说,我想引用

It's often said that "devs don't know how to quote nested "quoted strings"".

我想说明是用单引号还是双引号括起来的。除了反斜杠之外,我个人并不关心任何逃避角色,但其他人可能会这样做。

4 个答案:

答案 0 :(得分:2)

如果字符串的双引号都没有被转义,您只需执行以下操作:

str = str.replace(/"/g, "\\\"");

否则,您应该检查它是否已经被转义并且只有在它没有被替换时才被检查;你可以使用lookbehind。以下是我首先想到的内容,但对于像escaped backslash followed by quotes \\" :(

这样的字符串会失败
str = str.replace(/(?<!\\)"/g, "\\\"");

以下内容确保第二个最后一个字符(如果存在)不是反斜杠。

str = str.replace(/(?<!(^|[^\\])\\)"/g, "\\\"");

更新:记得 JavaScript不支持后视;你可以在perl / php / .net等后端支持正则表达式引擎上使用相同的正则表达式。

答案 1 :(得分:2)

任何体面的编程语言中的任何体面的正则表达式库都将具有执行此操作的功能 - 而不是自己编写一个很难(正如其他答案所示)。因此,有一个单独的网站或程序来完成它将是无用的。

  • Perl有quotemeta function
  • PCRE的C ++包装器有一个函数RE::QuoteMeta(警告:该链接的巨型文件),它做同样的事情
  • 如果您使用的是与Perl兼容的正则表达式,则PHP有preg_quote
  • Python re module有一个escape函数
  • 在Java中,java.util.regex.Pattern类有quote method
  • 基于Perl的Perl和大多数其他正则表达式引擎都有元字符\Q...\E,这意味着\Q\E之间的任何内容都按字面解释
  • 大多数使用POSIX正则表达式的工具(例如grep)都有一个选项,可以将其输入解释为文字字符串(例如grep -F

答案 2 :(得分:1)

在Python中,用单引号括起来:

import re
mystr = """It's often said that "devs don't know how to quote nested "quoted strings""."""
print("""'%s'""" % re.sub("'", r"\'", mystr))

输出:

'It\'s often said that "devs don\'t know how to quote nested "quoted strings"".'

您可以轻松地将其调整为更通用的形式,和/或将其包装在脚本中以进行命令行调用。

答案 3 :(得分:-1)

所以,我猜答案是“不”。对不起,伙计们,但我没有学到任何我不知道的东西。可能是我没有正确处理问题的错误。

发布

的所有人

+1