Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.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
Swift 数字之间可选字符的正则表达式_Swift_Regex_Regex Group_Nsregularexpression - Fatal编程技术网

Swift 数字之间可选字符的正则表达式

Swift 数字之间可选字符的正则表达式,swift,regex,regex-group,nsregularexpression,Swift,Regex,Regex Group,Nsregularexpression,我需要验证一个字符串,该字符串在数字之间包含下划线(\)。下划线字符是可选字符。 唯一的条件是,它应该在两个数字之间 我试过这个正则表达式 ([0-9]+_*[0-9]+)* 它失败了。知道为什么吗 附言: 我们将用swift语言实现这一点。 核心逻辑:下划线字符用作数字分隔符。您的([0-9]+*[0-9]+)*模式匹配0+个重复的1+数字、0+下划线,然后是1+数字。因此,它可以匹配12,3\uuuuuuuuuuu4,2345,以及一个空字符串。根据使用它的方法,它可能匹配部分或整个字符串

我需要验证一个字符串,该字符串在数字之间包含下划线(\)。下划线字符是可选字符。 唯一的条件是,它应该在两个数字之间

我试过这个正则表达式

([0-9]+_*[0-9]+)*
它失败了。知道为什么吗

附言: 我们将用swift语言实现这一点。 核心逻辑:下划线字符用作数字分隔符。

您的
([0-9]+*[0-9]+)*
模式匹配0+个重复的1+数字、0+下划线,然后是1+数字。因此,它可以匹配
12
3\uuuuuuuuuuu4
2345
,以及一个空字符串。根据使用它的方法,它可能匹配部分或整个字符串

你可以用

^[0-9]+(?:_[0-9]+)*$

如果将
NSPredicate
中的模式与
匹配项一起使用,则不需要使用
^
$
锚定,因为在这种情况下,整个字符串应与模式匹配

详细信息

  • ^
    -字符串的开头
  • [0-9]+
    -1+位
  • (?:
    -开始非捕获分组
    • -下划线
    • [0-9]+
      -1+位
  • )*
    -将图案序列重复0次或更多次
  • $
    -字符串结束

    • 简单它应该是或者

      ^[0-9]+([0-9]+)*$

      ^\d+(\d+)*$

      这两种方法都意味着从任何数字(
      )开始,然后有任何(零或更多)个模式(
      )下划线和数字的组合

      或反之亦然,

      ([0-9]+∗)*[0-9]+

      (\d+\u)*\d+


      这两种方法都意味着以任何(零或更多)个模式组合(
      )(数字和下划线)开始;然后有任何数字(
      )。

      您可以使用以下表达式:

      ^\d+(_\d+)*$
      

      哦,你终于非常巧妙地编辑并与我的正则表达式匹配了!请检查,这不是你的答案,你刚刚删除了你的第一个答案,并发布了一个,这是我的正则表达式的另一种形式,它也说以数字开始,然后有任何()的组合*。不管怎样,不管你不确定通过一次又一次地删除和更改你的答案你想要达到什么目的,你终于意识到你最初的答案(“^[0-9]+(*[0-9]+)*$”;)是错误的,这一次我没有读问题的底线“PS:两个连续的下划线字符无效。我们将用swift语言来实现它。”这就是为什么。谢谢you@curiousManish当前位置现在你复制了我的answer@AbdelahadDarwish:现在它涵盖了所有casesSorry@JogendarChoudhary,我不这么认为,它们都有相同的含义,只是添加了另一种方法来实现这一点。顺便说一句,我没有复制你的答案(“^[0-9]+(*[0-9]+)*$”)你后来意识到这是不正确的,你更新了你的答案,使之与我的答案相匹配。无论如何,快乐的日子,享受吧,伙计!
      ^\d+(_\d+)*$