PHP正则表达式在每个标记

时间:2016-10-20 10:30:59

标签: php regex

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

字符串可能包括:

[name* your-name ]

[email* your-main-email some_thing]

etc

业余逻辑:

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

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

    还是我用方法脱离目标?

    非常感谢

1 个答案:

答案 0 :(得分:1)

试试此代码

$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+匹配一个或多个空格
  • [^\]]*匹配零个或多个字符 ]
  • \]匹配结束方括号
  • /分隔符

修改

要在最后一个空格丢失时进行替换,即[name* your-name],然后使用以下正则表达式

/\[[^\s]+\s+([^\]\s]+)[^\]]*\]/