识别引号中字符串的最佳方法
Best way to recognize a string in quotes
匹配以下内容的正则表达式是什么?
1 foo
(不带引号的字符串)
2 "foo"
(双引号内的字符串)
3 'foo'
(单引号内的字符串)
4 "fo\"o"
(带有转义引号的字符串)
5 'fo\'o'
(带有转义引号的字符串)
到目前为止我已经想出了这个正则表达式:
[a-z]+|"[a-z]+"|'[a-z]+'
但它不考虑情况 4 和 5。
我觉得我可以解决这个问题(否定,嵌套组,看起来又丑又慢),但我不知道如何以优雅的方式实现它。
这是有效的正则表达式:
^(\"(?:(?:\w|\")+)\"|\'(?:(?:\w|\')+)\'|\w+)$
查看 Regex101 上的演示并阅读说明。先讲一点理论:
^
是字符串的开头,$
是结尾
(?:)
是非捕获组,这里仅用于重复定义
|
是组的各个部分之间的 或 分隔符。
现在正则表达式本身:
\"(?:(?:\w|\")+)\"
是"Foo"
和"Fo\"o"
的可能匹配。
(?:\w|\")+
代表至少一个单词或转义的 "
字符。
\"
是周围的字符
\'(?:(?:\w|\')+)\'
与上面相同,但对于 '
字符匹配 'Foo'
和 'Fo\'o'
.
\w+
代表任意一个词
你可以将正则表达式理解为:
^(match-with-double-quotations OR match-with-single-quotations OR match-a-word)$
匹配以下内容的正则表达式是什么?
1 foo
(不带引号的字符串)
2 "foo"
(双引号内的字符串)
3 'foo'
(单引号内的字符串)
4 "fo\"o"
(带有转义引号的字符串)
5 'fo\'o'
(带有转义引号的字符串)
到目前为止我已经想出了这个正则表达式:
[a-z]+|"[a-z]+"|'[a-z]+'
但它不考虑情况 4 和 5。
我觉得我可以解决这个问题(否定,嵌套组,看起来又丑又慢),但我不知道如何以优雅的方式实现它。
这是有效的正则表达式:
^(\"(?:(?:\w|\")+)\"|\'(?:(?:\w|\')+)\'|\w+)$
查看 Regex101 上的演示并阅读说明。先讲一点理论:
^
是字符串的开头,$
是结尾(?:)
是非捕获组,这里仅用于重复定义|
是组的各个部分之间的 或 分隔符。
现在正则表达式本身:
\"(?:(?:\w|\")+)\"
是"Foo"
和"Fo\"o"
的可能匹配。(?:\w|\")+
代表至少一个单词或转义的"
字符。\"
是周围的字符
\'(?:(?:\w|\')+)\'
与上面相同,但对于'
字符匹配'Foo'
和'Fo\'o'
.\w+
代表任意一个词
你可以将正则表达式理解为:
^(match-with-double-quotations OR match-with-single-quotations OR match-a-word)$