[英]Regex not getting all matches
基本上我正在編寫一個小模板解析器,它使用正則表達式來解析一些標簽,目前我在同一個文件中匹配多個標簽時遇到了麻煩。
這是我目前的正則表達式模式:
$regex = '#\{if \$([A-Za-z0-9_]+)\}([^{]+)(\{else\})?([^{]+)?\{\/if\}#'
我在這里錯過了什么嗎?
這是我試圖解析的模板文件的示例
{if $name}
Hi my name is: {$name}.
{else}
No name set.
{/if}
{if $male}
Gender: Male.
{else}
Gender: Female.
{/if}
這是我目前的PHP代碼:
<?php
$tpl_file = file_get_contents('template.tpl');
$regex = '#\{if \$([A-Za-z0-9_]+)\}([^{]+)(\{else\})?([^{]+)?\{\/if\}#';
if (preg_match_all($regex, $tpl_file, $matches)) {
print_r($matches);
}
?>
任何幫助是極大的贊賞。 干杯
你不應該使用正則表達式來創建這樣的解析器。 這是不可能的 。 無論如何,正如Francis所說,如果從第一個if
塊中刪除{$ name},它將使用您現有的代碼進行匹配。
在處理匹配的嵌套閉包時,正則表達式是悲慘的,悲慘的。 任何具有開始和結束結構的東西都是閉包並將它們塞進彼此之內或者在元級別上處理它們是非常困難的。
更詳細地看到這篇文章的最佳答案(X)HTML RegEx匹配除XHTML自包含標簽之外的開放標簽 ,然后認為你基本上用不同的大括號重新構造了一個類似XML的過程語法。
正則表達式用於“正則表達式”匹配。 不幸的是,“常規”並不意味着它經常意味着什么,而是針對特定類型的問題的數學標語。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.