Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式:要求引号在字符串中转义_Regex - Fatal编程技术网

Regex 正则表达式:要求引号在字符串中转义

Regex 正则表达式:要求引号在字符串中转义,regex,Regex,谢谢你的关注 为了找到这个正则表达式问题的正确搜索词,我花了很长时间。我需要确保引号已经在字符串中转义,否则匹配将失败。(这类问题的大多数搜索结果都只是说明需要转义引号或如何转义引号的页面。) 有效期: This is valid This \"is Valid This is al\"so Valid\" 无效: This i"s invalid This i"s inv"alid 到目前为止,我唯一能找到的就是 ((?:\\"|[^"])*) 这似乎与下面的第一部分相匹配,但在转义引号

谢谢你的关注

为了找到这个正则表达式问题的正确搜索词,我花了很长时间。我需要确保引号已经在字符串中转义,否则匹配将失败。(这类问题的大多数搜索结果都只是说明需要转义引号或如何转义引号的页面。)

有效期:

This is valid
This \"is Valid
This is al\"so Valid\"
无效:

This i"s invalid
This i"s inv"alid
到目前为止,我唯一能找到的就是

((?:\\"|[^"])*)
这似乎与下面的第一部分相匹配,但在转义引号之后没有任何内容

This is a \"test
同样,这应该失败:

This is a \"test of " the emergency broadcast system

感谢您的帮助,我希望这是可能的。

除了反斜杠和引号,或者反斜杠和下一个字符之外,您需要接受所有内容

([^\\"]|\\.)*
这样,这将失败:

ab\\"c
这将成功:

ab\\\"c
ab\"c
这将成功:

ab\\\"c
ab\"c

我不知道您使用的语言,但我会这样做:

创建一个regexp,该regexp匹配一个没有反斜杠的引号,它将在

This is a \"test
并在

This is a \"test of " the emergency broadcast system
例如,这个:

.*(?<!\\)".*
*(?在C#中,这似乎可以按照您的需要工作:

string pattern = "^([^\"\\\\]*(\\\\.)?)*$";
脱去逃逸的衣服会给你留下:

^([^"\\]*(\\.)?)*$
大致翻译为:字符串的开头(多个字符,不包括引号或反斜杠,可选反斜杠anychar)-重复,字符串的结尾


它是字符串的开始和结束标记,强制在整个文本上进行匹配。

要使用负查找

(?<!\\)"

(?您要查找的正则表达式是:

/^(?:[^"]*(?:(?<=\\\)"|))*$/
输出:

This is valid => matched [This is valid]
This \"is Valid => matched [This \"is Valid]
This is al\"so Valid\" => matched [This is al\"so Valid\"]
This i"s invalid => didn't match
This i"s inv"alid => didn't match
This is a \"test => matched [This is a \"test]
This is a \"test of " the emergency broadcast system - invalid => didn't match

+1,一个有趣的问题,REs实际上似乎是正确的工具。@JosephSilber我实际上没有使用语言,这个正则表达式将进入CMS中使用的正则表达式字段中,该字段需要用户输入来匹配:)没有什么东西是不使用语言的。CMS使用什么语言?需要注意的一个陷阱是,
a\\\\“b
a\\\\”b
无效,但
a\\\\“b
a\\”b
是有效的。这是因为前两个示例中引号前的偶数反斜杠被绑定为转义,即使引号前有一个反斜杠,引号也没有转义,而后两个示例中引号前的奇数反斜杠是可以的,因为偶数反斜杠引用了b反斜杠,留下奇怪的反斜杠来逃避引用。非常感谢大家的帮助!这对我很有效,除了一个例子:这是\“valid \我相信,虽然我不太可能在输入的末尾使用斜杠,但我可能会让输入失败。是的,它的设计目的是在结尾使用单个反斜杠时失败。原因是,如果字符串支持使用反斜杠的转义字符,则单个反斜杠永远不会有效。