我是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个语句来捕获我的字符串类型),这将是很好的。
由于
答案 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