请教前辈们一个正则表达式

2021-06-02 09:07:26 +08:00
 Yukee798

验证输入的字符串,类似如下结构

[4,10,12,#,10]

要求里面的元素可以是 #,也可以是数字,如果是数字的话取值范围必须在 [3,37] 范围内。 对正则不是很熟悉,查了半天也没写出来。

1906 次点击
所在节点    问与答
15 条回复
xiangyuecn
2021-06-02 09:25:30 +08:00
不要为难正则表达式了😂 split+一个循环 比写一个巨型正则更快 人类更容易理解
TomVista
2021-06-02 09:27:38 +08:00
\[(((#|[3-9]|[1-2][0-9]|3[0-7]),)*)(#|[3-9]|[1-2][0-9]|3[0-7])\]

不建议用正则,用字符串操作吧
TomVista
2021-06-02 09:29:05 +08:00
@TomVista 这个正则没有限制开头和结尾,你自己加一下,$^,
gstqc
2021-06-02 09:31:25 +08:00
\[\d+,{3}(#|[3-9]|[1-2]\d|3[0-7]),\d+\]

你这规则不明确
是说要求一个类似数组格式的字符串,5 个元素,第 4 个为#或 3-37,其余必须为数字?
逗号前后的空格是否允许?
oaix
2021-06-02 09:34:21 +08:00
^\[(?:|(?:[3-9]|[12][0-9]|3[0-7]|#)(?:,(?:[3-9]|[12][0-9]|3[0-7]|#))*)\]$

如果需要匹配空的[],可以用这个
hafuhafu
2021-06-02 09:36:40 +08:00
只会这种写法...
```
\[(([4-9]|3[0-7]?|[1-2]\d|#),)+([4-9]|3[0-7]?|[1-2]\d|#)\]
```
lujie2012
2021-06-02 09:48:15 +08:00
$^\[([0~9,#]){0, 70}\]$^

表达式很难写,因为你是规律的 xx, xxx, xx, 你不如直接切割变成 list 然后遍历其中的元素。这样的规范表达式不如写函数方法。我上面的写的是希望你理解一下,推荐你买一本 正则表达式书籍,系统的学习一下,不难,很简单。绿皮的那本书
emric
2021-06-02 09:52:03 +08:00
我猜楼主想要的是这个:
\[((#|[3-9]|[1-2][0-9]|3[0-7]),?)*\]
TomatoYuyuko
2021-06-02 09:56:58 +08:00
split 写快多了,能不用正则就不要用,数组操作多爽啊
balabalaguguji
2021-06-02 09:59:16 +08:00
用工具测试下就好啦 https://tools.fun/regexp.html
luckyrayyy
2021-06-02 10:15:35 +08:00
当你想用正则解决一个问题,那么你就有了两个问题。
shyangs
2021-06-02 10:34:15 +08:00
如果你有一個問題,想用正則表達式來解決,那麼你就有兩個問題了。
ungrown
2021-06-02 13:29:59 +08:00
正则是个好东西,但是别啥都用正则,你把字符串掐头去尾再分隔开来处理,不是轻松愉快吗?
一个复杂的正则匹配难道运行效率就不低了?
BeautifulSoap
2021-06-02 13:43:08 +08:00
那啥,正则性能挺差的,尤其你这种奇怪的需求,能不同正则就别用
xiangchen2011
2021-06-02 19:31:12 +08:00
@shyangs 这话说得对

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/780761

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX