【问题标题】:How to get a string in regex and delete other after matching the string如何在正则表达式中获取字符串并在匹配字符串后删除其他字符串
【发布时间】:2018-11-10 06:11:54
【问题描述】:

我的输入如下

1 等等等等@username_。呸呸呸呸呸

我需要的输出如下 用户名_。

现在,我做这个表达

^.*\@([a-zA-Z0-9\.\_]+)$

下面的工作

1 blah blah blah @username_。

但如果我将它用于整行它就不起作用

所以它在用户之前获取用户并删除 但是一旦获得用户,我如何让它删除其余部分

注意我使用 regex101 进行测试,如果你有更好的工具,请写在下面。

【问题讨论】:

  • 总是以_.?结尾?
  • 您应该发布实际代码。并发布一些失败的示例以及它们给出的输出以及您的预期。

标签: php regex instagram-api


【解决方案1】:

您的模式使用^$,这意味着它需要完全匹配,您的模式只是部分匹配。
通过添加.*,它变成了一个完整的正则表达式,并且符合预期。

"/^.*\@([a-zA-Z0-9\.\_]+).*$/"

https://3v4l.org/i4pVd

另一种方法是使用像这样的部分正则表达式。
它会跳过直到 @ 的所有内容,然后将所有内容捕获到一个点

$str = "1 blah blah blah @username_. sblah sblah sblah";
preg_match("/.*?\@(.*?\.)/", $str, $match);

var_dump($match);

https://3v4l.org/mvBYI

【讨论】:

    【解决方案2】:

    要匹配示例数据中的用户名,您可以preg_match 并省略$ 以断言字符串末尾的位置,如demo 中所示。请注意,您不必转义字符类中的@ 以及点和下划线。

    要获取示例数据中的用户名,您还可以使用:

    @\K[\w.]+

    那会匹配

    • @ 字面匹配
    • \K忘记之前匹配的内容
    • [\w.]+匹配单词字符或点1+次

    Regex demo

    $re = '/@\K[\w.]+/';
    $str = '1 blah blah blah @username_. sblah sblah sblah @test';
    preg_match($re, $str, $matches);
    echo $matches[0]; // username_.
    

    Demo php

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-05
      • 1970-01-01
      • 2011-11-08
      • 2015-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多