我有以下刺痛。我想知道任何字符串都有两个斜杠。
$sting = "largeimg/fee0b04800e22590/myimage1.jpg";
我正在尝试使用以下PHP emthodl
if(preg_match("@^/([A-Za-z]|[0-9])/([A-Za-z]|[0-9]+)$@", $sting))
但它无法正常工作。请帮帮我。
答案 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