【问题标题】:Regex for splitting hashtags, but ignore用于拆分主题标签的正则表达式,但忽略
【发布时间】:2017-02-06 22:38:24
【问题描述】:

我有一个字符串,我想在某个“上下文”之后匹配主题标签,例如|product

|product 之后我想匹配之后的主题标签。

这是我的完整字符串|product#houtprint#laserprint|materiaal#hout

到目前为止,这是我的正则表达式模式\|product(?<product>#[^\|]+)。 我现在在#houtprint#laserprint 上得到一个匹配,但我想单独在它们上得到一个匹配,所以#houtprint#laserprint

这也是我的 PHP 部分:

preg_match_all("~\|".$context."(?<".$context.">#[^\|]+)~", $tags_string, $matches);

如何确保我将产品作为单独的组获得?

【问题讨论】:

    标签: php regex


    【解决方案1】:

    您需要设置一个基于\G 的边界,以便preg_match_all 可以匹配连续的主题标签(在您指定的子字符串之后一个接一个):

    (?:\|product|\G(?!\A))(?<product>#[^|#]+)
    

    不确定您是否真的需要指定的捕获组。

    regex demo

    详情

    • (?:\|product|\G(?!\A)) - |product 子字符串 (\|product) 或上一个成功匹配的结束 (\G(?!\A))(这些分支可以交换以获得更好的性能)
    • (?&lt;product&gt;#[^|#]+) - 一个名为“产品”的捕获组匹配
      • # - 一个井号
      • [^|#]+ - 除了|# 之外的一个或多个字符。

    PHP demo:

    $re = '/(?:\|product|\G(?!\A))(?<product>#[^|#]+)/';
    $str = '|product#houtprint#laserprint|materiaal#hout';
    preg_match_all($re, $str, $matches);
    print_r($matches["product"]);
    // => Array ( [0] => #houtprint [1] => #laserprint )
    

    【讨论】:

      猜你喜欢
      • 2022-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-22
      • 2011-05-01
      • 2011-10-19
      • 2015-10-02
      • 1970-01-01
      相关资源
      最近更新 更多