【问题标题】:PHP preg_match Everything Between SlashesPHP preg_match 斜线之间的所有内容
【发布时间】:2014-12-25 15:15:18
【问题描述】:

我需要正则表达式向导的帮助,或者比我了解更多的人(这意味着有很多候选人:)

我正在尝试匹配第一个和第二个斜杠之间出现的所有内容,不包括那些斜杠,或者如果没有起始斜杠和尾随斜杠,则不匹配:

$subject = '/1234-abcd/blahblah';
$pattern = '/^\/(.*)\//';
preg_match($pattern, $subject, $matches);
print_r($matches);

结果如下:

Array
(
    [0] => /1234-abcd/
    [1] => 1234-abcd
)

我很接近。 $matches[1] 有我想要的结果,但它没有将其作为它的第一个数组项(而是第一个捕获的子模式)。

如何排除此正则表达式模式中的起始斜杠和尾部斜杠?

谢谢!

【问题讨论】:

    标签: php regex preg-match


    【解决方案1】:

    你可以使用这个正则表达式:

    $pattern = '#(?<=/)[^/]+#';
    

    并使用preg_match_all 而不是preg_match

    PS:请注意,您也可以使用explode 将您的输入拆分为/,并完全避免使用正则表达式。

    【讨论】:

    • 感谢您的回答!此模式匹配斜线后面的所有内容,类似于使用由/ 分隔的explode。相反,是否可以使用正则表达式捕获第一个和第二个斜杠之间的第一次出现?编辑:没关系!我使用preg_match_all 看到了这些结果。使用preg_match 时,正是我所需要的。非常感谢!!
    • 为此您可以使用:preg_match('#(?&lt;=/)[^/]+#', $input, $m); echo $m[0];
    猜你喜欢
    • 1970-01-01
    • 2022-01-10
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 2015-12-13
    • 1970-01-01
    相关资源
    最近更新 更多