捕获组与量词Regexp匹配

时间:2015-11-09 09:41:51

标签: php regex preg-match regex-lookarounds

我是regex世界的新手,我需要捕获一些不同类型的字符串。

顺便提一下,请建议更精确的方法来捕捉这些字符串。 n =任何正数(不相同)

|n||0||0||0||0|
|n||n||0||0||0|
|n||n||n||0||0|
|n||n||n||n||0|
|n||n||n||n||n|

我试图使用这样的正则表达式来捕获first和secodn类型的字符串

^\|([1-9]+)\|(?:([1-9]+)\|){4}|(?:(0)\|){4}$

应该将零视为单独的char, 我需要捕获每个数字或零

现在问题是它只捕获第一个匹配的字符和最后一个

但是没有捕获其他数字

请帮助使用这个正则表达式,如果有人提供更精确的方式(最后,我必须编写4个语句来捕获我的字符串类型),这将是很好的。

由于

3 个答案:

答案 0 :(得分:1)

我不确定这对你是否足够:

\|(?:(0)|([0-9]+))\|

https://regex101.com/r/fX5xI4/2

现在你必须将你的匹配分成x个元素组,其中x是colums数。我想应该没问题。

答案 1 :(得分:0)

怎么样:

^(?:\|[1-9][0-9]*\|){1,5}(?:\|0\|){0,4}$

<强>解释

^               : start of line
  (?:           : non capture group
   \|           : a pipe character
   [1-9][0-9]*  : a positive number of any length
   \|           : a pipe character
  ){1,5}        : the group is repeated 1 to 5 times
  (?:           : non capture group
    \|0\|       : a zero with pipe arround it
  ){0,4}        : group is repeated 0 to 4 times.
$               : end of line

这将匹配您给出的所有示例,即。一些正数后跟零。

答案 2 :(得分:0)

您可以先验证该行,然后只需查看\d+

验证:'~^\|[1-9]\d*\|(?:\|(?:[1-9]\d*|0+(?!\|\|[1-9]))\|){4}$~'

 ^                             # BOS
 \|
 [1-9] \d*                     # Any numbers that start with non-zero
 \|

 (?:
      \|
      (?:
           [1-9] \d*                     # Any numbers that start with non-zero
        |                              # or,
           0+                            # Any numbers with all zeros
           (?! \|\| [1-9] )              # Not followed by a non-zero
      )
      \|
 ){4}
 $                             # EOS