我正在尝试以一种可用的方式从文本文件中提取一些数据,但是我无法完全确定执行此操作的正确方法。原始文本文件如下所示:
<?php
require_once __DIR__.'/../vendor/autoload.php';
try {
(new Dotenv\Dotenv(__DIR__.'/../'))->load();
} catch (Dotenv\Exception\InvalidPathException $e) {
//
}
$app = new Laravel\Lumen\Application(
realpath(__DIR__.'/../')
);
$app->withFacades();
$app->withEloquent();
$app->singleton(
Illuminate\Contracts\Debug\ExceptionHandler::class,
App\Exceptions\Handler::class
);
$app->singleton(
Illuminate\Contracts\Console\Kernel::class,
App\Console\Kernel::class
);
$app->routeMiddleware([
'auth' => App\Http\Middleware\Authenticate::class,
]);
$app->register(Laravel\Passport\PassportServiceProvider::class);
$app->register(Dusterio\LumenPassport\PassportServiceProvider::class);
$app->router->group([
'namespace' => 'App\Http\Controllers',
], function ($router) {
require __DIR__.'/../routes/web.php';
});
return $app;
我需要它给我一些看起来像这样的JSON:
<!-- @[Hero(super)] -->
# Creating new contexts
<!-- @[UsageExample] -->
## Usage example
```javascript
Import { ICON_NAME } from 'Icons'
```
<!-- @[/Hero] -->
<!-- @[ArticleSection] -->
我希望所有这些都不会有所帮助,更好的细节还可以。我正在努力的部分是研究如何确定[
{
"name": "Hero",
"type": "super",
"h1" "Creating new contexts"
},
{
"name": "UsageExample",
"h2" "Usage example",
"codeType": "JavaScript",
"code": "Import { ICON_NAME } from 'Icons'",
"parent": "Hero"
}
]
和<!-- @[Hero(super)] -->
tl; dr:我正在寻找一种提取<!-- @[/Hero] -->
和<!-- @[Hero(super)] -->
之间的文本的方法
答案 0 :(得分:2)
您可以使用此正则表达式捕获您在帖子中提到的每一个数据,并使用它们来创建您自己在帖子中提到的JSON。
(?s)<!-- @\[(\w+)\((\w+)\)\] -->\s+# ([\w ]+?)\s+<!-- @\[(\w+)\] -->\s+## ([\w ]+?)\s+```(\w+)\s+(.*?)```\s+<!-- @\[\/(\w+)\] -->
上述正则表达式的命名组版本,
(?s)<!-- @\[(?<name>\w+)\((?<type>\w+)\)\] -->\s+# (?<h1>[\w ]+?)\s+<!-- @\[(?<name2>\w+)\] -->\s+## (?<h2>[\w ]+?)\s+```(?<codeType>\w+)\s+(?<code>.*?)```\s+<!-- @\[\/(?<parent>\w+)\] -->
这里有两个名称,您不能有重复的组名,因此第二个名为name2。
(?s)这可以使点与新行匹配,这将帮助您捕获多行数据
正则表达式的其余部分基本上将所需的数据捕获到可以在regex101演示中看到的各个组中。
演示