Chr*_*utz 31 regex perl escaping
我需要一个Perl正则表达式来匹配一个字符串.我假设只有双引号字符串,一个\"是一个文字引号字符,而不是字符串的结尾,并且\是一个字面反斜杠字符,不应该转义引号字符.如果不清楚,一些例子:
"\"" # string is 1 character long, contains dobule quote
"\\" # string is 1 character long, contains backslash
"\\\"" # string is 2 characters long, contains backslash and double quote
"\\\\" # string is 2 characters long, contains two backslashes
Run Code Online (Sandbox Code Playgroud)
我需要一个能够识别所有这四种可能性的正则表达式,以及这些可能性的所有其他简单变体,作为有效字符串.我现在拥有的是:
/".*[^\\]"/
Run Code Online (Sandbox Code Playgroud)
但那是不对的 - 除了第一个之外,它不会匹配任何一个.任何人都可以给我一个关于如何处理这个问题的正确方向吗?
j_r*_*ker 41
/"(?:[^\\"]|\\.)*"/
这与Cal的答案几乎相同,但具有匹配包含转义码的字符串的优点,例如\n.
的?:字符是否有防止包含的表达式被保存为一个反向引用,但可将它们取出.
Cal*_*Cal 26
这个怎么样?
/"([^\\"]|\\\\|\\")*"/
Run Code Online (Sandbox Code Playgroud)
匹配零个或多个字符不是斜杠或报价或两个斜线或斜线,然后报价
通用解决方案(匹配所有反斜杠的字符):
/ \A " # Start of string and opening quote
(?: # Start group
[^\\"] # Anything but a backslash or a quote
| # or
\\. # Backslash and anything
)* # End of group
" \z # Closing quote and end of string
/xms
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
53651 次 |
| 最近记录: |