[오리지널] OpenResty Lua 에서 Nginx 정규 표현 식 사용 하기

6881 단어
Lua 자체 정규 표현 식 은 확실히 좀 다 릅 니 다. "|" 을 지원 하지 않 고 정규 문법 이 적응 되 지 않 습 니 다. Nginx 원생 의 정규 표현 식 을 사용 하려 면 Lua 에서 Nginx 내 장 된 대상 ngx. re 를 빌려 야 합 니 다.
 
nginx. conf 파일 에서 잘못된 사용 방법:
    # nginx.conf
    ? location /test {
    ?     content_by_lua '
    ?         local regex = "\d+"  -- THIS IS WRONG!!
    ?         local m = ngx.re.match("hello, 1234", regex)
    ?         if m then ngx.say(m[0]) else ngx.say("not matched!") end
    ?     ';
    ? }
    # evaluates to "not matched!"

 ngix. conf 파일 의 올 바른 사용 방법 은 \ \ \ 를 기억 해 야 의 미 를 바 꿀 수 있 습 니 다.
    # nginx.conf
    location /test {
        content_by_lua '
            local regex = "\\\\d+"
            local m = ngx.re.match("hello, 1234", regex)
            if m then ngx.say(m[0]) else ngx.say("not matched!") end
        ';
    }
    # evaluates to "1234"

 
Lua 특유 의 [정규] 정의 부 호 를 사용 할 수 있 습 니 다.
    # nginx.conf
    location /test {
        content_by_lua '
            local regex = [[\\d+]]
            local m = ngx.re.match("hello, 1234", regex)
            if m then ngx.say(m[0]) else ngx.say("not matched!") end
        ';
    }
    # evaluates to "1234"

이 거 는 자기가 번역 을 했 어 요.
Here,  [[\\d+]]  is stripped down to  [[\d+]]  by the Nginx config file parser and this is processed correctly.
Note that a longer from of the long bracket,  [=[...]=] , may be required if the regex pattern contains  [...]  sequences. The  [=[...]=]  form may be used as the default form if desired.
    # nginx.conf
    location /test {
        content_by_lua '
            local regex = [=[[0-9]+]=]
            local m = ngx.re.match("hello, 1234", regex)
            if m then ngx.say(m[0]) else ngx.say("not matched!") end
        ';
    }
    # evaluates to "1234"

하면, 만약, 만약...by_lua_file 'test.lua'  \\\\d + 를 \ \ d + 로 간략화 합 니 다.
    -- test.lua
    local regex = "\\d+"
    local m = ngx.re.match("hello, 1234", regex)
    if m then ngx.say(m[0]) else ngx.say("not matched!") end
    -- evaluates to "1234"

하면, 만약, 만약...by_lua_file 'test.lua'   [[\ \ d +] 를 간략화 하여  [[\d+]]
    -- test.lua
    local regex = [[\d+]]
    local m = ngx.re.match("hello, 1234", regex)
    if m then ngx.say(m[0]) else ngx.say("not matched!") end
    -- evaluates to "1234"

원본:http://wiki.nginx.org/HttpLuaModule

좋은 웹페이지 즐겨찾기