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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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_Regex Negation_Regex Lookarounds_Regex Greedy - Fatal编程技术网

Regex 正则表达式只允许在字符串内部(引号内)使用逗号,而不允许在字符串外部使用逗号

Regex 正则表达式只允许在字符串内部(引号内)使用逗号,而不允许在字符串外部使用逗号,regex,regex-negation,regex-lookarounds,regex-greedy,Regex,Regex Negation,Regex Lookarounds,Regex Greedy,我对regex有些陌生。我正在寻找一个正则表达式,将其添加为不允许在字符串外使用逗号的约束 我的意见是 "1,212121,121212","Extra_data" 此处,正则表达式不应检查引号“12121121212”中第一个值中的逗号,而应在引号后检查,包括,“额外数据”。简而言之,表达式应该只允许字符串中的逗号位于引号内,而不允许位于引号外 请帮我解释一下这个表达式。试试这个 ".*?(?=,).*?" 它仅提取字符串中的逗号,仅在引号中使用请尝试以下正则表达式: "[^"]*"(,

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

我的意见是

"1,212121,121212","Extra_data" 
此处,正则表达式不应检查引号
“12121121212”
中第一个值中的逗号,而应在引号后检查,包括
,“额外数据”
。简而言之,表达式应该只允许字符串中的逗号位于引号内,而不允许位于引号外

请帮我解释一下这个表达式。

试试这个

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

它仅提取字符串中的逗号,仅在引号中使用

请尝试以下正则表达式:

"[^"]*"(,)[^"]*"[^"]*"
它将捕获您需要的逗号。但是请注意,PHP不支持相同组的捕获。i、 e.就你而言: 如果输入为:“12121121212”,“额外数据”,“hel,lo”,“a,bc”
它将捕获“额外数据”和“a,bc”之前的逗号,但将排除“hel,lo”之前的逗号。为此,您必须使用递归

您可以尝试使用此正则表达式

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

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

我认为这就是您要查找的内容,本质上是一组数字或逗号,这些数字或逗号由括号包围,然后在括号中后跟逗号和另一个短语(不一定是数字)。捕获组#1为您提供“12121121212”,捕获组#2为您提供“额外数据”

更多地了解您的输入是如何输入的,这将很有帮助。我认为剩下的最大问题是第一组是否总是只包含数字/逗号,或者第一组中是否有时包含其他字符,如字母、下划线等?如果第一组只包含数字,就像我假设的那样,那么这应该是可行的。如果不行,那么这就行不通了

编辑:


试图了解更多;这意味着
“12121121212”,“额外数据”
是无效字符串?此外,有效字符串是否只能包含逗号而不包含其他内容?您好,Pramod,表达式应使其无效。是的,它只能有逗号,没有其他输入:“12121121212”,“额外数据”;“12121121212”,“额外,数据”输出:“12121121212”,“额外,数据”?输入是“12121121212”,“额外的数据”输出应该只允许“1212121121212”和抛出约束错误,因为,“额外的数据”这是你要找的吗?嗨,乔恩,谢谢你的表达式。正如你所说,第1组不一定是数字,它可以是任何中间带逗号的字符串。@VigneshJei:我根据你所说的和我认为你想要的内容更新了表达式。我做得对吗?让我简单点,乔恩。我们不希望组1被选中,表达式应该只从组后的逗号处进行检查1@VigneshJei:刚刚添加了另一个正则表达式以进行尝试。它有用吗?若否,原因为何?
("[\d,]+")(,"[^"]+")
"\s*(,\s*"[^"]+")