PHP Regex查找+更改+替换每个标签


PHP Regex find + alter + replace within each tag

我是新的正则表达式,如果这确实是我需要的。

字符串可以包括:

[name* your-name ]
[email* your-main-email some_thing]
etc

业余逻辑:

  1. 搜索'['
  2. 获取当前和下一个之间的子字符串']'
  3. 提取带连字符的单词(可能在第一个和下一个空格之间找到第一个单词)
  4. 用连字符
  5. 替换子字符串
  6. 重复所有剩余标签

希望产生:

[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]+)[^']]*']/