我在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}, {`
如何使用正则表达式实现这一目标?
答案 0 :(得分:1)
您可以使用
'~{path\s*:\s*(?<path>[^{}]*?), name:(?<name>[^{}]*)}~'
与preg_match_all
。参见regex demo。
详细信息
{path
-文字{path
子字符串\s*:\s*
-用可选的0+空格字符括起来的冒号(?<path>[^{}]*?)
-组“路径”:除{
和}
以外的任何0+个字符,并且尽可能少, name:
-文字子字符串(?<name>[^{}]*)
-组“名称”:除{
和}
以外的任意0个以上的字符,}
-一个}
字符。$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
)