【问题标题】:How to create correct RegEx?如何创建正确的正则表达式?
【发布时间】:2018-03-20 04:40:19
【问题描述】:

我尝试了很多组合来创建正确的正则表达式,但我失败了。

我想读这个,输入:

[@Homer Jay Simpson](id:homer) is a good guy.

得到

Array (
   [0] => "[@Homer Jay Simpson](id:homer)",
   [1] => "Homer Jay Simpson",
   [2] => "homer"
)

谢谢!

【问题讨论】:

  • 我不确定@rika 正则表达式是否是一个不错的选择,最好尝试用括号分解字符串

标签: php regex preg-match preg-match-all


【解决方案1】:

稍微摆弄一下,这个正则表达式就会为你工作:

\[@([^\]]+)\]\(id:([^)]+)\)

像这样使用:

$str = "[@Homer Jay Simpson](id:homer) is a good guy.";
preg_match('#\[@([^\]]+)\]\(id:([^)]+)\)#', $str, $matches);
print_r($matches);

生产:

Array
(
    [0] => [@Homer Jay Simpson](id:homer)
    [1] => Homer Jay Simpson
    [2] => homer
)

创建正则表达式模式时的提示,从小处着手,并建立在它的末端。我从匹配方括号\[@([^\]]+)\] 的内部开始,然后拼凑其余部分。完整日志here

【讨论】:

    【解决方案2】:

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

    preg_match("/\[\@(.*?)\]\(id:(.*?)\)/", $str, $matches);
    Var_dump($matches);
    

    这将捕获括号 []() 之间的内容。
    \ 使 reges 读取符号为文字。
    .*? 表示懒惰捕获任何长度的任何内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多