使用正则表达式从字符串中提取创建日期,上次修改日期和方法名称

时间:2019-02-14 12:15:14

标签: php regex

部分代码存储在名为
的文件中 Website.php

<?php
namespace AdamInChains;
class Website
{

/**
 * 02.14.2019 13:24:59 creation date
 * 02.14.2019 13:28:23 last modified date
 * @param array $meta_tags
 *
 * @return string
 */
public function index(array $meta_tags) : string{}

/**
 * 02.14.2019 13:45:59 creation date
 * 02.14.2019 13:49:21 last modified date
 * @param array $meta_tags
 *
 * @return string
 */
public function about(array $meta_tags) : string{}

/**
 * 02.14.2019 14:01:52 creation date
 * 02.14.2019 14:33:01 last modified date
 * @param array $meta_tags
 *
 * @return string
 */
public function contact(array $meta_tags) : string{}
}

我需要提取创建日期和上次修改日期

然后以这种方式将正则表达式结果存储到一个数组中

$array = [
    // method name
    "index" => [
        "creation_date"=>"02.14.2019 14:01:52",
        "last_modified_date"=>"02.14.2019 13:28:23"
    ]
];

基本上,当用户(在本例中为AdamInChains,并且您可以从名称空间声明中看到此信息)在其网站上创建新页面时,将一个新方法(声明为输入页面名称)添加到类中,并且日期为已添加到该方法的文档注释中。

直到现在,我只能提取方法名称(请参见下面的代码),但其他任务无法成功。

// regex pattern
$re = '/public function.(\w{0,})/m';
// file 'Website.php'
$str = file_get_contents('Website.php');

preg_match_all($re, $str, $matches);

// Print the entire match result
var_dump($matches);

This is the var_dump results and I'm happy with it

有人吗?

1 个答案:

答案 0 :(得分:1)

这是一个可用于此的正则表达式:

(?<creationDate>\d{2}\.\d{2}\.\d{4}\s\d{2}:\d{2}:\d{2})\screation\sdate[^\Z]*?(?<modifiedDate>\d{2}\.\d{2}\.\d{4}\s\d{2}:\d{2}:\d{2})\slast\smodified\sdate[^\Z]*?public\sfunction\s(?<methodName>[^\(\s]+)

https://regex101.com/r/7wrrhj/1