我很抱歉只有另一个regEx问题,但即使在阅读了两个在线教程并使用三个在线正则表达式后,我仍然不明白为什么我的一些测试字符串与我的regEx匹配。
我想实现这个目标:
-
),下划线(_
),空格(
),竖线(|
)所以我写了这个regEx:[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/)和以下测试字符串测试regEx时,我得到以下结果
+--------+----------+--------+
| String | Expected | Actual |
+--------+----------+--------+
| T_2 | OK | OK |
| This | OK | OK |
| -bla | NOK | OK |
| _bla | NOK | OK |
| 0|This | OK | OK |
+--------+----------+--------+
我不明白为什么字符串-bla
和_bla
与正则表达式匹配,因为它们不以数字或字母开头。
可以请任何人向我解释这个并告诉我我的错误吗?
答案 0 :(得分:2)
您需要在正则表达式的开头添加<fragment
android:id="@+id/main_fragment"
android:name="com.mycompany.myapp.MainFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
符号,以指出它是字符串的开头:
^
^[a-zA-Z0-9]{1}[a-zA-Z0-9_\-\| ]{2,29}
表示&#34;字符串将以^
后的表达式开头。如果你不这样做,整个表达式将匹配字符串中的任何位置(因为它没有起点)。因此,例如,^
将在bla
中匹配 - 您将得到一个您不想要的匹配。