【发布时间】:2016-12-11 08:00:20
【问题描述】:
我很抱歉又问了一个正则表达式问题,但即使在阅读了两个在线教程并使用了三个在线正则表达式测试器之后,我仍然不明白为什么我的一些测试字符串与我的正则表达式匹配。
我想实现:
- 字符串的第一个字符只包含字母或数字
- 以下字符包含字母、数字、减号 (
-)、下划线 (_)、空格 ()、竖线 (|) - 整个字符串长度在 3 到 30 个字符之间
所以我写了这个正则表达式:[a-zA-Z0-9]{1}[a-zA-Z0-9_\-\| ]{2,29}
在我的理解中,这意味着字符串必须以一个字符 ({1}) 开头,该字符是字母或数字 ([a-zA-Z0-9] 或 \w),接下来的 2 到 29 个字符 ({2,29}) 可以还包含上面提到的字符。
使用在线工具(例如 http://www.phpliveregex.com/ )和以下测试字符串测试正则表达式时,我得到以下结果
+--------+----------+--------+
| String | Expected | Actual |
+--------+----------+--------+
| T_2 | OK | OK |
| This | OK | OK |
| -bla | NOK | OK |
| _bla | NOK | OK |
| 0|This | OK | OK |
+--------+----------+--------+
我不明白为什么字符串 -bla 和 _bla 与正则表达式匹配,因为它们不是以数字或字母开头。
谁能给我解释一下,告诉我我的错误吗?
【问题讨论】: