如何使用PHP中的正则表达式在其他两个字符串之间获取字符串?

时间:2018-07-16 08:33:17

标签: php regex

我在regexp方面的经验很少。我想走路

structural/designer/00-slider

分组中的名称,第二组中的名称

  

00滑块

使用正则表达式。

下面是语句

{path:structural/designer/00-slider, name:00-slider}, {path:structural/00-1_1, name:00-1_1}, {path:elements/tab, name:tab}

我用了这个正则表达式,

(.+?)path

我正在关注输出,

Match 1
Full match  0-5 `{path`
Group 1.    0-1 `{`
Match 2
Full match  5-58    `:structural/designer/00-slider, name:00-slider}, path`
Group 1.    5-54    `:structural/designer/00-slider, name:00-slider}, `
Match 3
Full match  58-97   `:structural/00-1_1, name:00-1_1}, {path`
Group 1.    58-93   `:structural/00-1_1, name:00-1_1}, {`

如何使用正则表达式实现这一目标?

1 个答案:

答案 0 :(得分:1)

您可以使用

'~{path\s*:\s*(?<path>[^{}]*?), name:(?<name>[^{}]*)}~'

preg_match_all。参见regex demo

详细信息

  • {path-文字{path子字符串
  • \s*:\s*-用可选的0+空格字符括起来的冒号
  • (?<path>[^{}]*?)-组“路径”:除{}以外的任何0+个字符,并且尽可能少
  • , name:-文字子字符串
  • (?<name>[^{}]*)-组“名称”:除{}以外的任意0个以上的字符,
  • }-一个}字符。

PHP demo

$re = '/{path\s*:\s*(?<path>[^{}]*?), name:(?<name>[^{}]*)}/m';
$str = '{path:structural/designer/00-slider, name:00-slider}, {path:structural/00-1_1, name:00-1_1}, {path:elements/tab, name:tab}';
if (preg_match_all($re, $str, $matches)) {
    print_r($matches['path']); echo "\n";
    print_r($matches['name']);
}

路径

Array
(
    [0] => structural/designer/00-slider
    [1] => structural/00-1_1
    [2] => elements/tab
)

名称

Array
(
    [0] => 00-slider
    [1] => 00-1_1
    [2] => tab
)