【问题标题】:Seeking quoted string generator求带引号的字符串生成器
【发布时间】:2010-06-29 07:12:28
【问题描述】:

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

假设,例如,我想引用

人们常说“开发人员不知道如何引用嵌套的“引用字符串””。

我想指定是用单引号还是双引号括起来。除了反斜杠,我个人不关心任何转义字符,但其他人可能会。

【问题讨论】:

  • 任何编辑器都可以进行搜索/替换,这还不够吗?
  • 适用于什么?必须使用的确切转义约定取决于语言... Shell 脚本?珀尔? php? Python? Tcl?
  • 您能更好地解释您的要求吗?您可能想转义其他字符...如果您的字符串包含反斜杠、换行符或其他字符怎么办?你将如何使用字符串?

标签: regex language-agnostic quotes magic-quotes


【解决方案1】:

如果字符串的双引号都没有被转义,你可以这样做:

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

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

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

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

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

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

【讨论】:

    【解决方案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

    【讨论】:

    • 这些都是很好的建议,但仍然取决于输出的用途:这些适用于正则表达式,有时适用于双引号字符串,但通常不适用于单引号字符串,例如...
    • 嗯,我想我把这个问题误读为只是询问正则表达式。
    【解决方案3】:

    在 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"".'
    

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

    【讨论】:

      【解决方案4】:

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

      为所有发帖的人 +1

      【讨论】:

        猜你喜欢
        • 2015-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-08
        • 2018-04-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多