ruby - 为什么这个正则表达式不匹配数字和单个字母?
问题描述
为什么这个正则表达式不匹配3a
?
(\/\d{1,4}?|\d{1,4}?|\d{1,4}[A-z]{1})
使用\d{1,4}\D{1}
,结果是一样的。
街道编号:
/1
78
3a
89/
-1 (special case)
1
解决方案
由于您的模式中的替代顺序,数字+字母组合不匹配。\d{1,4}?
匹配字母前的数字,甚至\d{1,4}[A-z]{1}
没有机会介入。请参阅记住正则表达式引擎是急切的文章。
将\/\d{1,4}?
匹配/
斜杠后的一个和一个数字,并且\d{1,4}?
总是匹配一个数字,就像{min,max}?
一个惰性范围/间隔/限制量词一样,因此只匹配尽可能少的字符。请参阅懒惰而不是贪婪。
另外,[A-z]
是笔误,应该是[A-Za-z]
。
看来你想要
\d{1,4}[A-Za-z]|\/?\d{1,4}
请参阅正则表达式演示。如果它应该在一行的开头,请使用
^(?:\d{1,4}[A-Za-z]|\/?\d{1,4})
请参阅此正则表达式演示。
细节
^
- 一行的开始(?:
-非捕获组的开始\d{1,4}[A-Za-z]
- 1 到 4 位数字和一个 ASCII 字母|
- 或者\/?
- 一个可选的/
\d{1,4}
- 1 到 4 位数字
)
- 小组结束。
推荐阅读
- rest - 自定义操作控制器中的验证
- php - 我将所有文件和文件夹从 wordpress 根目录移动到 wordpress 子目录
- javascript - 根据多个对象的值对数组进行排序
- bash - 使用扩展模式匹配的bash case语句语法错误
- python - Python> 如何:从第二个“while True”返回到第一个“while True”?
- python - 在 Pandas 的数据框中迭代两个连续行的 Pythonic 方法是什么?
- python - 需要计算具有多索引的数据帧的中位数
- php - DateTime 与对象 php 的比较
- css - 强制 100% 高度和垂直对齐 FlexBox 列中的内容
- operating-system - 非常小的地址的内存内容