用于在引号中提取字符串的正则表达式(在某些要求下)

时间:2013-04-12 09:28:00

标签: regex

也许问题似乎很糟糕,但目前我在从引号中提取字符串时遇到了一个真正的问题,但是满足了某些标准。这些是

  • 应该提取引号中的文字,而不是引号本身 例如我住在“德国” - >德国
  • 如果没有引号,则应完全返回文本
    例如我住在德国 - >我住在德国
  • 如果引号受\保护,则应将其视为普通字符并进行提取,但不应使用反斜杠 例如我住在“德国” - >我住在“德国”
  • 如果缺少最后一个引用,则应返回其余文本 例如我“住在德国 - >住在德国

我所有的实验都失败了。我最好的猜测是:

    (?<=(?<!\\)").*?(?=(?<!\\)")

问题在于,如果根本没有引号,则提取的字符串为空。

非常感谢帮助   最好的问候   脑

1 个答案:

答案 0 :(得分:1)

对于您的问题中写的测试用例,正则表达式应该适合您:

^([^"\n\\]*)(?:\\(")|"|)([^"\n\\]*)(?:\\(")|"|)(.*)$

您需要连接组#1,2,3,4,5才能获取捕获的字符串。

现场演示:http://www.rubular.com/r/u6m08cRo1v