Preg_match差异?

时间:2010-04-22 07:14:30

标签: php mysql database regex preg-match

我想问一下,这两行之间的含义或区别是什么?

  1. if( preg_match_all('/\#([א-תÀ-ÿ一-龥а-яa-z0-9\-_]{1,50})/iu', $message, $matches, PREG_PATTERN_ORDER) ) {

  2. if( preg_match_all('/\#([а-яa-z0-9\-_\x{4e00}-\x{9fa5}]{1,50})/iu', $message, $matches, PREG_PATTERN_ORDER) ) {

  3. 这个数字3的含义是什么? (箭头指向)

    if( preg_match_all('/\@([a-zA-Z0-9\-_\x{4e00}-\x{9fa5}]{->3,30})/u', $message, $matches, PREG_PATTERN_ORDER) ) {
    

    谢谢!

3 个答案:

答案 0 :(得分:3)

我会回答你问题的第二部分:

正则表达式中的{3,30}表示quantifiermin 3,最多为30 repetitions

  • a*表示零或更多a
  • a+表示一个或多个a
  • a?表示零或一a
  • a{1}表示与...完全相同 只是a
  • a{1,}表示一个或多个相同 a+
  • a{1,3}表示最小值1和最大值 3 a's

您可以使用任何复杂的正则表达式代替a。示例:[a-zA-Z]{3,30}至少表示3和任意字母的最大30

答案 1 :(得分:0)

你的第一个正则表达式包括第二个正则表达式不包括的希伯来语和重音拉丁字符(可能还有其他字符)。

答案 2 :(得分:0)

第二个表达式使用Unicode syntax来匹配Unicode字符。

  

\ x {FFFF} 其中FFFF是1到4个十六进制数字
  用于匹配特定Unicode代码点的Perl语法。可以在字符类中使用。

     

例:
  \ x {E0}匹配à仅编码为U + 00E0   \ x {A9}匹配©

因此它尝试将每个Unicode字符从U + 4e00匹配到U + 9fa5(从)而最后一个不是有效的Unicode字符。


第一个表达式也尝试匹配这些字符(一-龥)但它们不用Unicode语法表示(这是否反对我不知道的问题)。 另外(如前所述)第一个表达式匹配更多字符,即א-תÀ-ÿ


unicornaddict的第二个问题was already very well answered