我同意其他人的观点,正则表达式是要走的路。这里有一些可能会有所帮助的示例。
你没有定义你的标签应该做什么,所以让我们使用这个字符串作为例子。我添加的一项是 {sp###}...{/sp} 开始/结束标签,它可以让您更好地控制格式。
$str = "{sp5}{em}Italics {size30}ARE{/sp} {sp18}{b}fun.{/sp}";
关于 PHP 中的模式匹配需要了解的是,通过将部分模式放在括号内,它会将其设置为一个变量,您可以在字符串替换中重复使用该变量。
单字标签
// emphasize the next word
$str = preg_replace("/\{em\}(\w+)\b/","<em>$1</em>",$str);
这里我们寻找一个 {em} 后跟 一个或多个单词字符 \w+ 后跟一个单词边界。单词字符是任何字母、数字或下划线。 \w+ 在括号中,因此它将被设置为变量 $1 并在第二部分中重新使用,将其放置在 HTML em 标记中。括号中的任何其他模式将被迭代命名。 ($1 $2 $3 $4)
// Bold the next word if bracket content is 1 character
$str = preg_replace("/\{\w\}(\w+)\b/","<b>$1</b>",$str);
这里不是专门搜索 {em},而是搜索任何单个 单词字符。仅当它是单个字符时才匹配它,因为 \w 后面没有加号。
// bracket variables
$str = preg_replace("/\{size(\d+)\}(\w+)\b/","<span style='font-size: $1px;'>$2</span>",$str);
在此示例中,我们将下一个单词的 CSS 字体大小设置为指定的数量。在 {size 之后,我们查找设置为变量 $1 的任何数字中的一个或多个。然后将后面的一系列单词字符设置为$2。
开始/结束标签
// Letter Spacing
$str = preg_replace("/\{sp(\d+)\}(.+)\{\/sp\}/U","<span style='letter-spacing: $1px;'>$2</span>",$str);
这个和上一个很像,但有 3 个例外。我们不是搜索一个或多个单词字符,而是搜索带有点/句点通配符的任何字符。此外,我们不会以单词边界结束。我们搜索字符串“{/sp}”。最后,我们设置了 internal option U,它代表 Ungreedy。我们必须设置它,因为 ".+" 模式匹配 {/sp};如果模式的其余部分匹配,Ungreedy 允许它匹配第一次出现的结束标记。
终于
我希望这将带您进入正则表达式的美妙世界!
这些应该会有所帮助。
http://www.php.net/manual/en/reference.pcre.pattern.syntax.php
http://www.regextester.com/