验证输入的字符串,类似如下结构
[4,10,12,#,10]
要求里面的元素可以是 #
,也可以是数字,如果是数字的话取值范围必须在 [3,37]
范围内。
对正则不是很熟悉,查了半天也没写出来。
1
xiangyuecn 2021-06-02 09:25:30 +08:00 1
不要为难正则表达式了😂 split+一个循环 比写一个巨型正则更快 人类更容易理解
|
2
TomVista 2021-06-02 09:27:38 +08:00 1
\[(((#|[3-9]|[1-2][0-9]|3[0-7]),)*)(#|[3-9]|[1-2][0-9]|3[0-7])\]
不建议用正则,用字符串操作吧 |
4
0ZXYDDu796nVCFxq 2021-06-02 09:31:25 +08:00 via Android 1
\[\d+,{3}(#|[3-9]|[1-2]\d|3[0-7]),\d+\]
你这规则不明确 是说要求一个类似数组格式的字符串,5 个元素,第 4 个为#或 3-37,其余必须为数字? 逗号前后的空格是否允许? |
5
oaix 2021-06-02 09:34:21 +08:00 1
^\[(?:|(?:[3-9]|[12][0-9]|3[0-7]|#)(?:,(?:[3-9]|[12][0-9]|3[0-7]|#))*)\]$
如果需要匹配空的[],可以用这个 |
6
hafuhafu 2021-06-02 09:36:40 +08:00 1
只会这种写法...
``` \[(([4-9]|3[0-7]?|[1-2]\d|#),)+([4-9]|3[0-7]?|[1-2]\d|#)\] ``` |
7
lujie2012 2021-06-02 09:48:15 +08:00 1
$^\[([0~9,#]){0, 70}\]$^
表达式很难写,因为你是规律的 xx, xxx, xx, 你不如直接切割变成 list 然后遍历其中的元素。这样的规范表达式不如写函数方法。我上面的写的是希望你理解一下,推荐你买一本 正则表达式书籍,系统的学习一下,不难,很简单。绿皮的那本书 |
8
emric 2021-06-02 09:52:03 +08:00 1
我猜楼主想要的是这个:
\[((#|[3-9]|[1-2][0-9]|3[0-7]),?)*\] |
9
TomatoYuyuko 2021-06-02 09:56:58 +08:00
split 写快多了,能不用正则就不要用,数组操作多爽啊
|
10
balabalaguguji 2021-06-02 09:59:16 +08:00
用工具测试下就好啦 https://tools.fun/regexp.html
|
11
luckyrayyy 2021-06-02 10:15:35 +08:00 3
当你想用正则解决一个问题,那么你就有了两个问题。
|
12
shyangs 2021-06-02 10:34:15 +08:00
如果你有一個問題,想用正則表達式來解決,那麼你就有兩個問題了。
|
13
ungrown 2021-06-02 13:29:59 +08:00
正则是个好东西,但是别啥都用正则,你把字符串掐头去尾再分隔开来处理,不是轻松愉快吗?
一个复杂的正则匹配难道运行效率就不低了? |
14
BeautifulSoap 2021-06-02 13:43:08 +08:00 via Android
那啥,正则性能挺差的,尤其你这种奇怪的需求,能不同正则就别用
|
15
xiangchen2011 2021-06-02 19:31:12 +08:00
@shyangs 这话说得对
|