为什么这个字符串与我的regEx匹配?

时间:2016-12-11 08:00:21

标签: php regex

我很抱歉只有另一个regEx问题,但即使在阅读了两个在线教程并使用三个在线正则表达式后,我仍然不明白为什么我的一些测试字符串与我的regEx匹配。

我想实现这个目标:

  • 字符串的第一个字符只包含字母或数字
  • 以下字符包含字母,数字,减号(-),下划线(_),空格(),竖线(|
  • 整个字符串长度在3到30个字符之间

所以我写了这个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与正则表达式匹配,因为它们不以数字或字母开头。

可以请任何人向我解释这个并告诉我我的错误吗?

1 个答案:

答案 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中匹配 - 您将得到一个您不想要的匹配。

Here is a working example