什么是符合以下条件的正则表达式?
1 df -hP /
(不带引号的字符串)
2 foo
(双引号内的字符串)
3 "foo"
(单引号内的字符串)
4 'foo'
(带转义引号的字符串)
5 "fo\"o"
(带转义引号的字符串)
到目前为止,我已经提出了这个正则表达式:
'fo\'o'
但不考虑情况4和5。
我觉得我可以解决这个问题(使用否定,嵌套组,丑陋且缓慢),但是我不知道如何以一种优雅的方式做到这一点。
答案 0 :(得分:2)
这是正常的正则表达式:
^(\"(?:(?:\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)$