簡體   English   中英

用正則表達式卡住

[英]Stuck with regex

我要匹配的模式是[{Any text between here}]

我的正則表達式:

/\[\{[\W\w]*?\}\]/

我正在使用preg_match_all()

到目前為止,它正在運行,但是我想知道是否有更好的解決方案?

如果要查找包含[{}]匹配項,請使用

/\[\{[^}]+\}\]/

如果您想在文字內進行匹配,請使用

/(?<=\[\{)[^}]+(?=\}\])/

如果其中的文本可能包含}字符(例如[{hello} yellow}] ),則將[^}]+替換為.+? 在上述兩種正則表達式模式中。 原始模式不使用惰性運算符,因此性能更好?

您可以將其簡化為

\[\{.*?\}\]

甚至

\[{.*?}]

但除此之外,它看起來還不錯。


編輯

請注意,雖然正則表達式可以執行所需的操作,但由於使用了惰性運算符,因此性能欠佳。

通過RegexBuddy之類的工具進行檢查時,此正則表達式需要21個步驟才能得出解決方案,而@Ωmega的解決方案僅需要5個步驟

使用此正則表達式(?<=\\[\\{)(.+?)(?=\\}\\])

鍵“ U”使正則表達式引擎不貪婪:

preg_match_all('_\[{.*}\]_U', '[{safda}adsfsf}}][{safda}adsfsf}}]', &$matches);

給出 $matches

Array
(
    [0] => Array
        (
            [0] => [{safda}adsfsf}}]
            [1] => [{safda}adsfsf}}]
        )

)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM