사용자 도구

사이트 도구


kb:luaregularexpression

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

kb:luaregularexpression [2014/11/06 17:14] (현재)
줄 1: 줄 1:
 +====== Lua Regular Expression ======
 +루아에서도 정규식을 사용할 수 있기는 한데, [[Perl]], [[Python]], [[Ruby]] 같이 본격적(?​)인 스크립트 언어보다는 기능이 좀 빈약한 편이다.
 +
 +
 +====== 검색 ======
 +string 모듈의 **find** 또는 **gmatch** 함수를 이용한다. ​
 +
 +**find** 함수는 정규식과 일치하는 부분의 시작과 끝 인덱스를 반환한다. 정규식이 그룹화된 것이라면,​ 시작과 끝 인덱스 외에도 해당 문자열도 반환한다.
 +
 +<code lua>
 +string.find (s, pattern [, init [, plain]])
 +</​code>​
 +
 +<code lua>
 +local b1, e1, pattern = string.find("​abcd12efgh",​ "​[a-z]+"​)
 +print(b1, e1, pattern)
 +local b1, e1, pattern = string.find("​abcd12efgh",​ "​([a-z]+)"​)
 +print(b1, e1, pattern)
 +</​code>​
 +
 +<​code>​
 +1    4    nil
 +1    4    abcd
 +</​code>​
 +
 +**gmatch** 함수는 iterator 함수를 반환한다. 이 함수는 호출할 때마다 다음으로 일치하는 문자열을 반환한다.
 +
 +<code lua>
 +string.gmatch (s, pattern)
 +</​code>​
 +
 +<code lua>
 +s = "hello world from Lua"
 +for w in string.gmatch(s,​ "​%a+"​) do
 +    print(w)
 +end
 +</​code>​
 +
 +<​code>​
 +hello
 +world
 +from
 +Lua
 +</​code>​
 +
 +
 +====== 치환 ======
 +string 모듈의 **gsub** 함수를 이용한다.
 +
 +<code lua>
 +string.gsub (s, pattern, repl [, n])
 +</​code>​
 +
 +<code lua>
 +print(string.gsub("​hello world",​ "​(%w+)",​ "%1 %1"))
 +print(string.gsub("​hello world",​ "​%w+",​ "%0 %0", 1))
 +print(string.gsub("​hello world from Lua", "​(%w+)%s*(%w+)",​ "%2 %1"))
 +</​code>​
 +
 +<​code>​
 +hello hello world world 2
 +hello hello world 1
 +world hello Lua from 2
 +</​code>​
 +
 +특이한 것은 치환할 대상(repl)으로 문자열 뿐만 아니라, 테이블, 함수 등을 전달할 수도 있다는 점인데, 이에 관한 것은 루아 매뉴얼을 참고하길 바란다.
 +
 +
 +====== 링크 ======
 +  * [[http://​www.lua.org/​manual/​5.1/​manual.html#​5.4 | Lua 5.1 Reference Manual: String Manipulation]]
 +----
 +  * see also [[Lua]], [[RegularExpression]]
  
kb/luaregularexpression.txt · 마지막으로 수정됨: 2014/11/06 17:14 (바깥 편집)