正则表达式只允许逗号在字符串内(引号内)而不是在字符串外

Regex Expression to allow comma only inside a string (within quotes)and not outside it

我对正则表达式有点陌生。我正在寻找一个正则表达式来将其添加为约束,不允许在字符串外使用逗号。

我的输入就像

"1,212121,121212","Extra_data" 

此处的正则表达式不应检查引号 "1,212121,121212" 中第一个值中的逗号,但应检查包括 ,"Extra_data" 在内的引号后的逗号。简而言之,表达式应该只允许在引号内而不是引号外的字符串中使用逗号。

请帮助我表达。

试试这个

".*?(?=,).*?"

它只提取字符串中引号内的逗号

试试下面的正则表达式:

"[^"]*"(,)[^"]*"[^"]*"

它将捕获您需要的逗号。但请注意 PHP 不支持捕获相同的组。即在你的情况下: 如果输入是:"1,212121,121212","Extra_data","hel,lo","a,bc" 它会捕获 "Extra_data" 和 "a,bc" 之前的逗号,但会排除 "hel,lo" 之前的逗号。为此,您必须使用递归。

您可以尝试使用这个正则表达式。

(^,)|("\s*,\s*")|(,$)

如果您找到与此正则表达式匹配的任何内容,则该字符串将无效。

我认为这就是您要查找的内容,本质上是一组数字或逗号,用括号括起来,然后是逗号和括号中的另一个短语(不一定是数字)。捕获组 #1 给你 "1,212121,121212" 捕获组 #2 给你 ,"Extra_data"

("[\d,]+")(,"[^"]+")

如果能更多地了解您的输入是如何输入的,将会很有帮助。我认为剩下的最大问题是第一组是否总是只包含 numbers/commas,或者有时是否有其他字符,例如第一组中的字母、下划线等?如果第一组只包含数字,正如我假设的那样,那么这应该有效。如果没有,那么这将不起作用。

编辑:

"\s*(,\s*"[^"]+")