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

时间:2016-02-23 04:07:51

标签: regex regex-negation regex-lookarounds regex-greedy

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

我的输入就像

"1,212121,121212","Extra_data" 

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

请帮助我表达。

4 个答案:

答案 0 :(得分:0)

试试这个

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

它只在引号

中的字符串中提取逗号

答案 1 :(得分:0)

尝试以下正则表达式:

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

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

答案 2 :(得分:0)

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

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

如果您发现此正则表达式匹配,则该字符串将无效。

答案 3 :(得分:0)

我认为这就是你要找的东西,本质上是一组用括号括起来的数字或逗号,然后用逗号括起来,另外一个短语(不一定是数字)括在括号中。捕获组#1为您提供“1,212121,121212”,捕获组#2为您提供“Extra_data”

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

更多地了解您的输入可能会有所帮助。我认为剩下的最大问题是第一组是否始终只包含数字/逗号,或者是否有其他字符如字母,下划线,在第一组?如果第一组只包含数字,正如我所假设的那样,那么这应该有效。如果没有,那么这将不起作用。

编辑:

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