【问题标题】:Php find string with regexphp用正则表达式查找字符串
【发布时间】:2012-04-25 22:12:44
【问题描述】:

我已经阅读了多篇关于正则表达式的教程,但它不会让我印象深刻。我永远无法让我的模式发挥作用。希望有人能帮忙。

我有一个 php 变量 ($content),我需要在其中找到一个看起来像这样的特定模式

[画廊::name/of/the/folder/]

我想搜索:

- starting with "[gallery::"
- any other character (variable length)
- ending with "]"

到目前为止,在 PHP 中我有:

   preg_match('/\[gallery\:/', $content, $matches, PREG_OFFSET_CAPTURE);

我可以找到[画廊:但仅此而已。 我希望能够找到其余的(:name/of/the/folder/])

感谢任何帮助! 谢谢!

【问题讨论】:

    标签: php regex


    【解决方案1】:

    尝试捕捉它:

    preg_match("/\[gallery::(.*?)]/",$content,$m);
    

    现在$m 是一个数组:

    0 => [gallery::/name/of/the/folder/]
    1 => /name/of/the/folder/
    

    【讨论】:

    • 如果字符串是“开头”,请确保在 "\[gallery" 之前添加一个 '^' 字符
    • 不会多次出现([gallery::/name/of/the/folder/][gallery::/name/of/the/folder/])导致使用贪婪捕获的问题所有字符?
    • @TimHoolihan 这是一个非贪婪的捕获
    • @nathanjosiah 使用+ 也是一个有效的答案,但由于它应该是“任何长度”,我认为包含 0 - 毕竟,如果路径是空字符串(换句话说,当前目录)?
    • 您确定在正确的位置输入路径吗?可能是一个愚蠢的问题,但搜索字符串中的 / 没有理由无法匹配此正则表达式。
    【解决方案2】:

    将你的正则表达式更改为

    '/\[gallery::([A-Za-z\/]+)\]/'
    

    由于我将文件夹/路径部分放在括号中,因此您应该从中获取一个捕获组。

    【讨论】:

    • 需要另一个:,不需要转义,如果你需要匹配/你应该使用另一个分隔符,比如#
    • [A-Za-z] 一方面只匹配一个字符,但它不匹配“所有字符”——当然也不匹配文件名中允许的字符。
    • @Kolink,注意括号后面的+号
    • @TimHoolihan 是的,有一个+,但只有当每个路径元素都是一个字符长时才有效(即a/b/c/d,而不是abcd/efg)。此外,只有第一个(或最后一个,不确定它是如何工作的)匹配的子模式会与该正则表达式一起返回。
    • @Kolink,你是对的,我修复了加号的位置并在 nregex.com 上进行了测试,现在可以使用
    猜你喜欢
    • 2012-12-01
    • 2012-05-28
    • 2012-10-31
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多