정보 추출을위한 부스트의 정규 표현식

모 히트 타쿠 르

정규 표현식을 사용하여 다음 표현식을 macth하고 싶습니다.

Execute stmtname
and
Execute stmtname using @a,@b;

stmtname과 변수 목록을 추출하고 싶습니다. 나는 다음을 시도했다.

^execute[\s\t]+(\w+)[\s\t]+(using[\s\t]*(.+))?

그러나 두 번째 문만 구문 분석 할 수 있습니다. 누구든지이 문제를 해결하도록 도와주세요.

보다

정규식으로 문법을 "구문 분석"하려고하지 않을 것입니다. 이미 Boost를 사용하고 있기 때문에 Boost Spirit을 통해 파서 생성기 국가로 모험을 떠나 보는 것은 어떨까요?

std::string statement_name;
std::vector<std::string> parameters;

bool ok = qi::phrase_parse(
    first, last,
    qi::no_case[ 
        sr::distinct(qi::graph) ["execute"] 
        >> ident_ 
        >> -(sr::distinct(qi::graph) ["using"] >> 
                ('@' >> ident_) % ','
            )
        >> -qi::lit(';') >> qi::eoi
    ],
    qi::space,
    statement_name,
    parameters
);

복잡성의 대부분은 내가 매우 세 심하게 노력했기 때문입니다.

  • 구분 된 식별자 토큰 (예 :으로 execute_only구문 분석하지 않음 execute _only) 및
  • 공백 허용
  • ;마지막에 선택 사항 수락 (이 점에서 귀하의 예가 상충됩니다)

테스트 프로그램은 다음을 인쇄합니다.

-----------------------------------------
Parsing 'Execute no_parameter_statement'
Parse success
statement_name: no_parameter_statement
0 parameters:
-----------------------------------------
Parsing 'Execute stmtname using @a,@b;'
Parse success
statement_name: stmtname
2 parameters:
    @a
    @b

Live On Coliru

#include <boost/spirit/include/qi.hpp>
#include <boost/spirit/repository/include/qi_distinct.hpp>

namespace qi = boost::spirit::qi;
namespace sr = boost::spirit::repository::qi;

typedef std::string::const_iterator It;
qi::rule<It, std::string()> ident_ = sr::distinct(qi::char_("a-z0-9_")) [ qi::alpha >> *(qi::char_("a-z0-9_")) ];

int main() {
    for(std::string const input : {
            "Execute no_parameter_statement",
            "Execute stmtname using @a,@b;"
            })
    {
        std::cout << "-----------------------------------------\n";
        std::cout << "Parsing '" << input << "'\n";

        std::string statement_name;
        std::vector<std::string> parameters;

        auto f(input.begin()), l(input.end());
        bool ok = qi::phrase_parse(f,l,qi::no_case[ 
                sr::distinct(qi::graph) ["execute"] 
                >> ident_ 
                >> -(sr::distinct(qi::graph) ["using"] >> 
                        ('@' >> ident_) % ','
                    )
                >> -qi::lit(';') >> qi::eoi
            ],
            qi::space,
            statement_name,
            parameters
        );

        if (ok) {
            std::cout << "Parse success\n";

            std::cout << "statement_name: " << statement_name << "\n";
            std::cout << parameters.size() << " parameters:\n";
            for(auto const& p : parameters)
                std::cout << "\t@" << p << "\n";
        } else {
            std::cout << "Parse failed\n"; 
        }

        if (f!=l)
            std::cout << "Remaining unparsed: '" << std::string(f,l) << "'\n";
    }
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

정보 추출을위한 부스트의 정규 표현식

분류에서Dev

부동 소수점 변환을위한 정규식 표현식

분류에서Dev

PostgreSQL의 적절한 정규 표현식

분류에서Dev

정규 표현식 질문-동일한 표현식에서 두 개의 부정적보기

분류에서Dev

정규 표현식, 표현의 일부에 대한 부정적인 예측

분류에서Dev

스칼라 정규식 : 문자열에서 표현식 추출

분류에서Dev

Swift의 정규 표현식

분류에서Dev

Php의 정규 표현식 (. *?)

분류에서Dev

Vim의 정규 표현식

분류에서Dev

GWT의 정규 표현식

분류에서Dev

grep의 정규 표현식

분류에서Dev

Racket의 정규 표현식

분류에서Dev

IBAN 추출을위한 정규식 업데이트

분류에서Dev

문자열의 특정 부분을 추출하기위한 Javascript 정규식

분류에서Dev

Scala : 정규 표현식을 사용하여 문자열의 일부 추출

분류에서Dev

Perl의 정규 표현식 부정

분류에서Dev

정규식 표현식이 필요한 자바 스크립트

분류에서Dev

숫자 추출을위한 정규식

분류에서Dev

Java의 특정 문자열에 대한 정규식 표현식

분류에서Dev

정규 표현식을 사용하여 특정 단어 앞의 숫자 추출

분류에서Dev

간단한 수학 표현식을위한 정규 표현식

분류에서Dev

후속 따옴표 안의 정보를 캡처하기위한 R의 정규 표현식

분류에서Dev

YouTube 삽입 URL 확인을위한 자바 스크립트 정규 표현식

분류에서Dev

문자 벡터의 홀수 정렬을위한 R 정규 표현식

분류에서Dev

텍스트의 정규 표현식을 사용한 Python 목록 이해

분류에서Dev

사용자 정의 헤더 "액세스 토큰"을 추출하는 JMeter 정규 표현식 추출기

분류에서Dev

날짜를 얻기위한 R의 정규 표현식

분류에서Dev

정규 표현식의 부분 일치

분류에서Dev

pharse 내부의 정규 표현식-Javascript

Related 관련 기사

  1. 1

    정보 추출을위한 부스트의 정규 표현식

  2. 2

    부동 소수점 변환을위한 정규식 표현식

  3. 3

    PostgreSQL의 적절한 정규 표현식

  4. 4

    정규 표현식 질문-동일한 표현식에서 두 개의 부정적보기

  5. 5

    정규 표현식, 표현의 일부에 대한 부정적인 예측

  6. 6

    스칼라 정규식 : 문자열에서 표현식 추출

  7. 7

    Swift의 정규 표현식

  8. 8

    Php의 정규 표현식 (. *?)

  9. 9

    Vim의 정규 표현식

  10. 10

    GWT의 정규 표현식

  11. 11

    grep의 정규 표현식

  12. 12

    Racket의 정규 표현식

  13. 13

    IBAN 추출을위한 정규식 업데이트

  14. 14

    문자열의 특정 부분을 추출하기위한 Javascript 정규식

  15. 15

    Scala : 정규 표현식을 사용하여 문자열의 일부 추출

  16. 16

    Perl의 정규 표현식 부정

  17. 17

    정규식 표현식이 필요한 자바 스크립트

  18. 18

    숫자 추출을위한 정규식

  19. 19

    Java의 특정 문자열에 대한 정규식 표현식

  20. 20

    정규 표현식을 사용하여 특정 단어 앞의 숫자 추출

  21. 21

    간단한 수학 표현식을위한 정규 표현식

  22. 22

    후속 따옴표 안의 정보를 캡처하기위한 R의 정규 표현식

  23. 23

    YouTube 삽입 URL 확인을위한 자바 스크립트 정규 표현식

  24. 24

    문자 벡터의 홀수 정렬을위한 R 정규 표현식

  25. 25

    텍스트의 정규 표현식을 사용한 Python 목록 이해

  26. 26

    사용자 정의 헤더 "액세스 토큰"을 추출하는 JMeter 정규 표현식 추출기

  27. 27

    날짜를 얻기위한 R의 정규 표현식

  28. 28

    정규 표현식의 부분 일치

  29. 29

    pharse 내부의 정규 표현식-Javascript

뜨겁다태그

보관