我正在尝试构建一个仅匹配无序数字序列的正则表达式。我只能创建一个与有序数字序列匹配的相反正则表达式,但我不知道如何反转它。这是 demo 。
^((?:0(?=1|$))?(?:1(?=2|$))?(?:2(?=3|$))?(?:3(?=4|$))?(?:4(?=5|$))?(?:5(?=6|$))?(?:6(?=7|$))?(?:7(?=8|$))?(?:8(?=9|$))?9?|(?:9(?=8|$))?(?:8(?=7|$))?(?:7(?=6|$))?(?:6(?=5|$))?(?:5(?=4|$))?(?:4(?=3|$))?(?:3(?=2|$))?(?:2(?=1|$))?(?:1(?=0|$))?0?)$
输入:
123
234567
0123456789
87654
321
985
346
320
预期比赛:
985
346
320
最佳答案
尝试这个正则表达式:
^(?=.*(?:1(?![02])|2(?![13])|3(?![24])|4(?![35])|5(?![46])|6(?![57])|7(?![68])|8(?![79])|9(?!8)|0(?!1))(?!$))\d+$
说明:
^
- 断言字符串的开头(?=.*(?:1(?![02])|2(?![13])|3(?![24])|4(?![35])| 5(?![46])|6(?![57])|7(?![68])|8(?![79])|9(?!8)|0(?!1)) (?!$))
- 前瞻以确保匹配不包含任何连续数字(例如,如果有2
,则后面不应跟有3
或1
。此检查适用于所有数字)\d+
- 匹配出现 1 次以上的数字$
- 断言字符串结尾
关于匹配所有无序数字序列的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47964332/