簡體   English   中英

Lua 匹配錯誤模式

[英]Lua matching wrong pattern

我需要匹配字符串並返回 (\aHEX) 和 (text)。

並像使用它

for k, v in string.gmatch("Default \aFFFFFFFFWhite text \aFF0000FFJust red text", "<pattern>") do
    -- k = "" / "\aFFFFFFFF" / "\aFF0000FF"
    -- v = "Default" / "White text " / "Just red text"
end

試過這個

local text = "Default \aFF00FFFFRed text\a00FF00FFGreen";

for k, v in text:gmatch("(\a%x%x%x%x%x%x%x%x)(%w+)") do
    print(string.format("%s: %s", k, v));
    -- \aFF00FFFF: Red
    -- \a00FF00FF: Green
end

缺少“默認”和“文本”

問題是您不能使用 Lua 模式使一系列模式可選。

您可以使用

local text = "Default \aFF00FFFFRed text\a00FF00FFGreen";
 
for word in text:gmatch("\a?[^\a]+") do
  k, v = word:match("^(\a%x%x%x%x%x%x%x%x)(%w+)$")
  if k then
     print(string.format("%s: %s", k, v));
  else
     print(word)
  end
end

Output:

Default 
FF00FFFFRed text
00FF00FF: Green

詳情

  • \a?[^\a]+匹配所有出現的以可選的\a開頭,然后包含除\a以外的一個或多個字符的序列
  • 然后^(\a%x%x%x%x%x%x%x%x)(%w+)$應用於每個找到的 substring,如果匹配,則生成鍵值對,否則整個匹配是必需的值。

暫無
暫無

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

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