我是新的正则表达式,如果这确实是我需要的。
字符串可以包括:
[name* your-name ]
[email* your-main-email some_thing]
etc
业余逻辑:
- 搜索'['
- 获取当前和下一个之间的子字符串']'
- 提取带连字符的单词(可能在第一个和下一个空格之间找到第一个单词)
- 用连字符 替换子字符串
- 重复所有剩余标签
希望产生:
[your-name]
[your-main-email]
etc
还是我的方法偏离了目标?
多谢
试试这个代码
$str = '[name* your-name ] [email* your-main-email some_thing]';
$str = preg_replace("/'[[^'s]+'s+([^']'s]+)'s+[^']]*']/", "[$1]", $str);
echo $str;
正则表达式的解释:
-
'[
匹配起始方括号 -
[^'s]+
匹配一个或多个非空格字符 -
's+
匹配一个或多个空格 -
(
启动抓包组 -
[^']'s]+
匹配一个或多个非空格且非]
-
)
结束抓包组 -
's+
匹配一个或多个空格 -
[^']]*
匹配0个或多个非]
字符 -
']
匹配右方括号 -
/
分隔符
/
分隔符编辑
当最后一个空格缺失时,即[name* your-name]
,然后使用以下regex
/'[[^'s]+'s+([^']'s]+)[^']]*']/