簡體   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