正则表达式匹配多行

时间:2017-08-22 14:47:10

标签: php regex

我正在编写一个小的bash脚本来编辑我的mkdocs配置文件,并根据另一个目录的内容更新它的一部分。

我正在尝试替换配置文件中的内容,但是我在匹配需要用正则表达式模式替换的部分时遇到了一些问题。

以下是我尝试更新的部分:

# Pages
pages:
  - Home: index.md
  - Getting Started:
    - Installation: getting-started/installation.md
  - Methods:
    - config: methods/config.md
    - add_header: methods/add_header.md
    - add_tabs: methods/add_tabs.md
    - add_fields: methods/add_fields.md
    - footer: methods/footer.md
  - Settings Fields:
    - Text: fields/text.md
    - Checkbox: fields/checkbox.md
    - Radio: fields/radio.md
    - Select: fields/select.md
    - Image: fields/image.md
    - Multicheck: fields/multicheck.md
  - Hooks & Filters:
    - Overview: actions/overview.md
  - Examples:
    - Basic Plugin: examples/basic-plugin.md
    - Plugin Add-On: examples/plugin-addon.md

我要更新的部分是'设置字段'部分。

目前我有:

/ {2}- Settings Fields:([^#]+) {2}-/g

这似乎符合我的需要,然后是一些。

例如:

    - Text: fields/text.md
    - Checkbox: fields/checkbox.md
    - Radio: fields/radio.md
    - Select: fields/select.md
    - Image: fields/image.md
    - Multicheck: fields/multicheck.md
  - Hooks & Filters:
    - Overview: actions/overview.md
  - Examples:
    - Basic Plugin: examples/basic-plugin.md
    -

理想情况下,我只想返回以下内容,因此我可以删除它并将其替换为新内容:

- Text: fields/text.md
- Checkbox: fields/checkbox.md
- Radio: fields/radio.md
- Select: fields/select.md
- Image: fields/image.md
- Multicheck: fields/multicheck.md

我已经设置了regex101测试,我在摆弄东西,但我没有正则表达式向导。任何指针都会受到赞赏。

Regex101:https://regex101.com/r/DViAoA/1

2 个答案:

答案 0 :(得分:0)

您可以修改正则表达式以使用ungreedy运算符并添加{2}模式的行首,如下所示:

 {2}- Settings Fields:([^#]+?)^ {2}-
                ungreedy ---^ ^--- start of line

<强> Working demo

答案 1 :(得分:0)

你不需要复杂的正则表达式。
您只需要SettingsHooks之间的内容 编辑使其更灵活的模式。它现在将匹配2个空格和 - 或字符串结尾。

$re ='/\s{2}-\sHooks & Filters:(.*?)^\s{2}-|\z/ms';
$str = '# Pages
pages:
 - Home: index.md
 - Getting Started:
   - Installation: getting-started/installation.md
  - Methods:
    - config: methods/config.md
    - add_header: methods/add_header.md
    - add_tabs: methods/add_tabs.md
    - add_fields: methods/add_fields.md
    - footer: methods/footer.md
  - Settings Fields:
    - Text: fields/text.md
    - Checkbox: fields/checkbox.md
    - Radio: fields/radio.md
    - Select: fields/select.md
    - Image: fields/image.md
    - Multicheck: fields/multicheck.md
  - Hooks & Filters:
     - Overview: actions/overview.md
  - Examples:
    - Basic Plugin: examples/basic-plugin.md
    - Plugin Add-On: examples/plugin-addon.md';

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

Echo rtrim($matches[1]);

https://3v4l.org/5WrSY
https://regex101.com/r/DViAoA/2