使用Regex在php中的brakets标签之间提取文本

时间:2016-04-17 16:17:02

标签: php regex

我在字符串中有以下内容(来自DB的查询),例如:

def target_hit(mouse, target):

    x_range = range(target.x, target.x + 60)
    y_range = range(target.y, target.y + 60)
    target_rect = itertools.product(x_range, y_range)

    return (mouse.x, mouse.y) in targe_frame


    # and somewhere down in the code
    if target_hit(mouse, target):
        # do stuff

所以我只想提取$fulltext = "Thank you so much, {gallery}art-by-stephen{/gallery}. As you know I fell in love with it from the moment I saw it and I couldn’t wait to have it in my home!" 标签之间的内容,我正在执行以下操作,但它不起作用:

{gallery}

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

试试这个:

$regexPatternGallery= '/\{gallery\}(.*)\{\/gallery\}/';

你需要在它之前转义/和{以及\。而你在哪里缺少模式的开始和结束。

http://www.phpliveregex.com/p/fn1

答案 1 :(得分:0)

与Andreas的答案类似,但在([^"]*?)

中有所不同
$regexPatternGallery= '/\{gallery\}([^"]*?)\{\/gallery\}/';
  1. 不要忘记将/放在Regex字符串的开头和结尾。这是PHP必须的,与其他编程语言不同。
  2. {}/是可以混淆为正则表达式逻辑的字符,因此您必须使用\ \{来转义它。
  3. 使用?使字符串变为非贪婪,从而节省内存。它在面对这种字符串"blabla {galery}you should only get this{/gallery} but you also got this instead.{/gallery} Rarely happens but be careful anyway"时避免了错误。

答案 2 :(得分:0)

试试这个RegEx:

\{gallery\}(.*?)\{\/gallery\}

您的RegEx问题在于您没有在结束/中逃避{gallery}。您还需要转义{}

您应该使用.*?进行惰性匹配,否则如果一个字符串中有2个标记,则会将它们组合在一起。即{gallery}by-joe{/gallery} and {gallery}by-tim{/gallery}最终会成为:

by-joe{/gallery} and {gallery}by-tim

但是,使用延迟匹配,您将得到2个结果:

by-joe
by-tim

Live Demo on Regex101