我想创建一个正则表达式来查找以单引号或双引号开头和结尾的字符串。
例如,我可以匹配这样的情况:
String: "Hello World"
RegEx: /[\"\'][^\"\']+[\"\']/
但是,当引号出现在字符串本身中时,就会出现问题,如下所示:
String: "Hello" World"
我们知道上面的表达式是行不通的。
我想要做的是在字符串本身内进行转义,因为无论如何这都是必需的功能:
String: "Hello\" World"
现在我可以想出一个长而复杂的表达式,其中包含一个组中的各种模式,其中一个是:
RegEx: /[\"\'][^\"\']+(\\\"|\\\')+[^\"\']+[\"\']/
然而,这对我来说似乎太过分了,我认为可能有一个更短、更优雅的解决方案。
预期语法:
run arg1 "arg1" "arg3 with \"" "\"arg4" "arg\"\"5"
如您所见,引号实际上仅用于确保带有空格的字符串被计为单个字符串。别担心arg1
,我应该能够匹配未引用的参数。
我会让这更容易,参数只能使用双引号引起来。所以我从这个问题的要求中去掉了单引号。
我修改了 Rui Jarimba 的例子:
/(?<=")(\\")*([^"]+((\\(\"))*[^"])+)((\\"")|")/
现在这对于大多数情况来说都很好,但是最后一种情况可以解决这个问题:
run -a "arg3 \" p2" "\"sa\"mple\"\\"
在这种情况下,第二个参数 end with \\"
which 是允许嵌套字符串末尾的反斜杠的常规方式,不幸的是,正则表达式认为这是一个转义的引号,因为模式\"
仍然存在于模式的末尾。