繁体   English   中英

从字符串创建字符串数组

[英]Creating an array of strings from a string

我有一长串。 在该字符串中,我需要注意和处理某些字符:

$lyrics = "This is an {G}example of a {D}long string.  It's {Em}getting {C}longer and {Am}longer the more I {Dm7-5}type"

我想做的是查找大括号的出现,如果我在大括号之间找到的字符串的长度小于X,则执行A;如果它等于或大于X,则执行B。

事物A和事物B都涉及将花括号更改为HTML。

我已经搜索和思考这个问题很多天了,但是我还没有找到一种简洁明了的方法。

当然,我可以将字符串视为数组并循环遍历-但是真的吗? 这真的是我一个问题,从$ lyrics中的第一个字符开始一直走到最后吗?

我是否有一个明显更简单的解决方案? 正则表达式有帮助吗? 我知道什么是正则表达式,但我承认我不必过多地使用它们。

我同意其他观点,正则表达式是解决之道。 这里有一些例子可能会有所帮助。

您没有定义标签应该执行的操作,因此让我们使用此字符串作为示例。 我添加的一个附加功能是{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}而是搜索任何单个单词character 仅当它是单个字符时才匹配它,因为\\ 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}”。 最后,我们设置内部选项 U,代表Ungreedy。 我们必须设置它,因为“。+”模式匹配{/ sp}; 如果其余模式匹配,则Ungreedy允许它匹配end标签的第一次出现。

最后

希望这能带您进入正则表达式的美好世界!

这些应该会有所帮助。

http://www.php.net/manual/zh/reference.pcre.pattern.syntax.php

http://www.regextester.com/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM