Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.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
Regex 仅匹配奇数或偶数的正则表达式_Regex - Fatal编程技术网

Regex 仅匹配奇数或偶数的正则表达式

Regex 仅匹配奇数或偶数的正则表达式,regex,Regex,我有一个用户可以输入数据库的文本条目列表,我需要用正则表达式验证这些输入,因为其中有些输入很复杂。其中一个字段的数字必须有间隙(即10、12、14、16…)。我的问题是,是否有一个正则表达式构造允许我只匹配偶数或奇数的运行?我知道我可以提取这个值并对其进行除法检查,但我希望如果可能的话,可以得到一个纯正则表达式的解决方案 [编辑] 我最终使用的解决方案是对JaredPar的一种改编,因为除了只需要奇数或偶数之外,我还需要限制一个范围(即,所有偶数都在10-40之间)。下面是完成的正则表达式 ^[

我有一个用户可以输入数据库的文本条目列表,我需要用正则表达式验证这些输入,因为其中有些输入很复杂。其中一个字段的数字必须有间隙(即10、12、14、16…)。我的问题是,是否有一个正则表达式构造允许我只匹配偶数或奇数的运行?我知道我可以提取这个值并对其进行除法检查,但我希望如果可能的话,可以得到一个纯正则表达式的解决方案

[编辑]

我最终使用的解决方案是对JaredPar的一种改编,因为除了只需要奇数或偶数之外,我还需要限制一个范围(即,所有偶数都在10-40之间)。下面是完成的正则表达式

^[123][02468]$奇数

"^\d*[13579]$"
偶数

"^\d*[02468]$"
使用、和潜在的空格分隔符的可能性

"$\s*(\d*[13579]\s*,\s*)*\d*[13579]$"
"$\s*(\d*[02468]\s*,\s*)*\d*[02468]$"
使用、和可能的空格分隔符运行even

"$\s*(\d*[13579]\s*,\s*)*\d*[13579]$"
"$\s*(\d*[02468]\s*,\s*)*\d*[02468]$"

你是说:

/(\d*[02468](, *\d*[02468]))|(\d*[13579](, *\d*[13579]))/

或者你的问题的其他三种可能的解释中的一种?

如果你考虑到一个偶数或奇数只需要看最后一个数字就可以测试,那么正则表达式实际上并不难设计。因此奇数运行的正则表达式可以是:

"^(\s*\d*[13579]\s*,)*(\s*\d*[13579]\s*)$"

对于偶数,用[02468]替换[13579]。

我认为您还需要在每个组中的第二个子组上加星号,不是吗?您的正则表达式中的{1}可能完全没有必要,尽管您的正则表达式引擎可能与我的不同。该正则表达式将匹配最多48个数字。如果你想把它限制在40,你需要这个:^[123][02468]| 40$,克里斯是对的:{1}在正则表达式中是纯粹的噪音,不管你使用的是哪种正则表达式味道。谢谢,我已经在上面调整了我的正则表达式。你真的是一个非常聪明的解决方案