检查字符串中的两个斜杠

时间:2014-06-13 09:46:36

标签: php regex preg-match

我有以下刺痛。我想知道任何字符串都有两个斜杠。

      $sting = "largeimg/fee0b04800e22590/myimage1.jpg";

我正在尝试使用以下PHP emthodl

     if(preg_match("@^/([A-Za-z]|[0-9])/([A-Za-z]|[0-9]+)$@", $sting))

但它无法正常工作。请帮帮我。

4 个答案:

答案 0 :(得分:4)

以下是如何在正则表达式中执行此操作(请参阅demo):

^([^/]*/){2}

您的代码:

if(preg_match("@^([^/]*/){2}@", $sting)) {
// two slashes!
}

解释正则表达式

^                        # the beginning of the string
(                        # group and capture to \1 (2 times):
  [^/]*                  #   any character except: '/' (0 or more
                         #   times (matching the most amount
                         #   possible))
  /                      #   '/'
){2}                     # end of \1 (NOTE: because you are using a
                         # quantifier on this capture, only the LAST
                         # repetition of the captured pattern will be
                         # stored in \1)

答案 1 :(得分:3)

您可以使用substr_count(),执行:

$sting = "largeimg/fee0b04800e22590/myimage1.jpg";
if(substr_count($sting, '/') == 2) { echo "has 2 slashes"; }

答案 2 :(得分:1)

要检查2个斜杠,可以使用此正则表达式:

preg_match('@/[^/]*/@', $sting)

答案 3 :(得分:1)

其他几个答案提供了有效的正则表达式,但它们没有解释为什么问题中的表达式不起作用。表达式是:

@^/([A-Za-z]|[0-9])/([A-Za-z]|[0-9]+)$@

([A-Za-z]|[0-9])部分相当于([A-Za-z0-9])。第二个类似部分中的额外+使该部分完全不同。 +的优先级高于|。因此,([A-Za-z]|[0-9]+)部分等同于([A-Za-z]|([0-9]+))(忽略捕获和非捕获括号之间的差异)。该表达式被解释为:

^                 Start of string
/                 The character '/'
([A-Za-z]|[0-9])  One alphanumeric
/                 The character '/'
(                 
    [A-Za-z]      One alpha character
    |             or
    [0-9]+        One or more digits
)                 
$                 End of the string

这只匹配前三个字符为/的字符串,一个字母数字,然后是/。然后字符串的其余部分必须是一个alpha或几个数字。因此,这些字符串将匹配:

/a/b
/c/123
/4/d
/5/6
/7/890123456789

这些字符串不匹配:

/aa/b
c/c/123
/44/d
/5/6a
/5/a6
/7/ee