【问题标题】:Regex Expression to allow comma only inside a string (within quotes)and not outside it正则表达式仅允许在字符串内(引号内)而不是在字符串外使用逗号
【发布时间】:2016-02-25 13:35:55
【问题描述】:

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

我的输入是这样的

"1,212121,121212","Extra_data" 

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

请帮我解决这个问题。

【问题讨论】:

  • 试图了解更多;这意味着"1,212121,121212","Extra_data" 是无效字符串?另外,有效的字符串可以只包含一个逗号而不包含其他内容吗?
  • 嗨 Pramod,该表达式应该使其无效。是的,它只能有逗号,没有别的

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


【解决方案1】:

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

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

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

编辑:

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

【讨论】:

  • 这是您要找的吗?
  • 嗨乔恩,感谢您的表达。正如你所说,第 1 组不一定是数字,它可以是任何中间有逗号的字符串。
  • @VigneshJei:我根据您所说的以及我认为您所追求的内容更新了表达式。我在正确的轨道上吗?
  • 让我把它简单化,乔恩。我们不希望检查组 1,表达式应该只检查组 1 之后的逗号
  • @VigneshJei:刚刚添加了另一个正则表达式来尝试。它有效吗?如果没有,为什么不呢?
【解决方案2】:

试试这个

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

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

【讨论】:

  • 输入:"1,212121,121212","Extra_data" ; "1,212121,121212","Extra,data" 输出:"1,212121,121212","Extra,data" ?
  • 输入是 "1,212121,121212","Extra_data" 输出应该只允许 "1,212121,121212" 并且抛出约束错误为 ","Extra_data" "
【解决方案3】:

试试下面的正则表达式:

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

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

【讨论】:

    【解决方案4】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-11
      • 2016-08-20
      • 1970-01-01
      • 2020-12-25
      • 2011-08-13
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      相关资源
      最近更新 更多