Lua Academy · Oppitunti

string.gsub ja string.gmatch

Korvatkaa merkkijonoissa olevia hahmomätsäyksiä ja käykää ne läpi.

Oppitunti 4/412 vaihetta

string.gsub ja string.gmatch on ilmainen Lua Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Lua Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Lua Academy-kurssilla on yhteensä 4 oppituntia.

string.gsub-funktion perusteet

string.gsub(s, pattern, repl, n) korvaa kuvion pattern osumat merkkijonossa s arvolla repl enintään n kertaa (oletuksena kaikki). Se palauttaa tuloksena olevan merkkijonon ja tehtyjen korvausten määrän. Korvaava arvo voi olla merkkijono, taulukko tai funktio.

local s = "hello world hello"
local result, count = string.gsub(s, "hello", "hi")
print(result)  -- hi world hi
print(count)   -- 2

-- Limit replacements
local r2 = string.gsub(s, "hello", "hi", 1)
print(r2)      -- hi world hello

Poimintaviittaukset korvauksessa

Korvaavassa merkkijonossa %1, %2 ja niin edelleen viittaavat kuvion poimintoihin. %0 viittaa koko osumaan. Näin voitte järjestää tai ympäröidä osuneen tekstin uudelleen.

-- Swap first and last name
local name = "Smith, John"
local swapped = string.gsub(name, "(%a+), (%a+)", "%2 %1")
print(swapped)   -- John Smith

-- Wrap numbers in brackets
local text = "items: 3 and 7 total 10"
local tagged = string.gsub(text, "%d+", "[%0]")
print(tagged)    -- items: [3] and [7] total [10]

Funktio korvauksena

Kun korvaava arvo on funktio, gsub kutsuu sitä jokaiselle osumalle (tai poimitulle osalle) ja käyttää palautusarvoa korvauksena. Palauttakaa nil tai false, jos haluatte säilyttää alkuperäisen osuman. Tämä mahdollistaa dynaamiset, laskennalliset korvaukset.

local env = {NAME="Lua", VERSION="5.4"}
local template = "Welcome to $NAME version $VERSION!"
local result = string.gsub(template, "%$(%w+)", env)
print(result)   -- Welcome to Lua version 5.4!

-- Double each number
local s = "a1 b2 c3"
local r = string.gsub(s, "%d+", function(n)
  return tostring(tonumber(n) * 2)
end)
print(r)  -- a2 b4 c6

Taulukko korvauksena

Kun korvaava arvo on taulukko, gsub hakee jokaisen osuman (tai ensimmäisen poimitun osan) taulukosta ja käyttää tulosta. Jos haku palauttaa nil- tai false-arvon, alkuperäinen osuma säilytetään. Tämä sopii erinomaisesti korvaussanakirjoihin.

local abbreviations = {
  str = "string",
  num = "number",
  tbl = "table",
  fn  = "function",
}

local text = "A str can hold a num or a tbl"
local expanded = string.gsub(text, "%a+", abbreviations)
print(expanded)
-- A string can hold a number or a table

string.gmatch-funktion perusteet

string.gmatch(s, pattern) palauttaa iteraattorin, joka käy läpi kaikki kuvion pattern osumat merkkijonossa s. Jokainen iteraattorin kutsu palauttaa seuraavan osuman (tai poimitut osat, jos kuviossa on niitä). Tämä on Luassa idiomattinen tapa käydä osumat läpi.

local s = "one=1 two=2 three=3"

-- Iterate all words
for word in string.gmatch(s, "%a+") do
  io.write(word .. " ")
end
print()  -- one two three

-- Iterate key=value pairs
for k, v in string.gmatch(s, "(%a+)=(%d+)") do
  print(k, v)
end

Merkkijonojen tokenisointi gmatch-funktiolla

Käyttäkää string.gmatch-funktiota syötteen tokenisointiin: jakakaa teksti tyhjien merkkien kohdalta, jäsentäkää CSV-rivejä tai poimikaa jäsenneltyä tietoa. Kuvio määrittää poimittavan sisällön; kaikkea muuta käsitellään erottimena.

-- Split by whitespace
local function tokenize(s)
  local tokens = {}
  for token in string.gmatch(s, "%S+") do
    tokens[#tokens+1] = token
  end
  return tokens
end

local toks = tokenize("  hello   world   lua  ")
for i, t in ipairs(toks) do
  print(i, t)
end
-- 1 hello  2 world  3 lua

URL-parametrien jäsentäminen

Jäsentäkää kyselymerkkijonot käymällä avain–arvo-parit läpi. Kuvio ([^&=]+)=([^&]+) poimii kunkin avaimen ja arvon, jotka on erotettu merkillä = ja joiden välissä ovat &-erottimet.

local url_params = "name=Alice&age=30&city=Istanbul"
local params = {}

for key, value in string.gmatch(url_params, "([^&=]+)=([^&]*)") do
  params[key] = value
end

print(params.name)  -- Alice
print(params.age)   -- 30
print(params.city)  -- Istanbul

HTML-tunnisteiden poistaminen

Yleinen tekstinkäsittelytehtävä on HTML-tunnisteiden poistaminen merkkijonosta. Käyttäkää string.gsub-funktiota kuvion kanssa, joka täsmää avaaviin ja sulkeviin tunnisteisiin, ja korvatkaa ne tyhjällä merkkijonolla.

local html = "<h1>Hello</h1> <p>World <b>bold</b></p>"
local plain = string.gsub(html, "<[^>]+>", "")
print(plain)   -- Hello  World bold

-- Replace <br> with newline
local html2 = "line1<br>line2<br/>line3"
local fixed = string.gsub(html2, "<br/?>", "\n")
print(fixed)

Erikoismerkkien suojaaminen

Luan kuvioiden erikoismerkit ovat: . + * ? [ ] ^ $ % ( ). Jos haluatte täsmätä niihin literaalisesti, suojatkaa ne merkillä %. Kun käytätte näitä merkkejä sisältäviä literaalisia merkkijonoja, välittäkää true neljäntenä argumenttina string.find-funktiolle kuvioiden täsmäytyksen poistamiseksi käytöstä.

-- Escape a string for use in a pattern
local function escapePattern(s)
  return (string.gsub(s, "[%(%)%.%%%+%-%*%?%[%^%$]", "%%%1"))
end

local query = "1+1=2"
local pattern = escapePattern(query)
print(string.find("result: 1+1=2", pattern, 1))  -- 9  13

Esiintymien laskeminen

Käyttäkää string.gsub-funktion toista palautusarvoa (korvausten määrää) merkkijonon kuvioesiintymien laskemiseen, vaikka ette tekisi yhtään korvausta.

local text = "banana"
local _, count = string.gsub(text, "a", "")
print("'a' appears " .. count .. " times")  -- 3

-- Count words
local sentence = "the quick brown fox"
local _, wordCount = string.gsub(sentence, "%S+", "")
print("Words:", wordCount)  -- 4

Pikatarkistus

Mitä string.gsub("hello", "l", "L") palauttaa?

Kertaus: gsub ja gmatch

Yhteenveto:

  • gsub(s, pat, repl, n) — korvaa; repl voi olla merkkijono, taulukko tai funktio
  • %1...%n korvausmerkkijonoissa viittaavat poimintoihin
  • gmatch(s, pat) — käy kaikki osumat läpi
  • Käyttäkää %-merkkiä kuvioiden erikoismerkkien suojaamiseen: %., %+ jne.
  • Laskekaa esiintymät gsub-funktion toisella palautusarvolla
Aloita maksutta

Opi Lua tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
40
Oppitunnit
159

Usein kysytyt kysymykset

Onko oppitunti ”string.gsub ja string.gmatch” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Lua Academy-oppimispolun 3 oppituntia, myös oppitunnin “string.gsub ja string.gmatch”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Lua Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”string.gsub ja string.gmatch”?

Korvatkaa merkkijonoissa olevia hahmomätsäyksiä ja käykää ne läpi. Harjoittelet Lua Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Lua Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Lua Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.

Kuinka kauan ”string.gsub ja string.gmatch”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Lua Academy-oppitunnilla?

Kyllä. Jokainen Lua Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Merkkijonojen perusteet: yhdistäminen ja pituus
  2. Alimerkkijonojen etsiminen ja poimiminen
  3. string.format tulostuksessa
  4. string.gsub ja string.gmatch
← Takaisin: Lua Academy