정규식: 문자열에서 두 태그 사이의 하위 문자열을 추출하려면 다음과 같이 하세요.

다음 형식의 파일이 있습니다:

데이터 데이터
데이터
[시작]
원하는 데이터
[End]
데이터

정규식을 사용하여 '[시작]태그와 '[끝] 태그 사이에서 원하는 데이터를 가져오고 싶습니다. 누구든지 이 작업을 수행하는 방법을 보여줄 수 있나요?

질문에 대한 의견 (1)
\[start\](.*?)\[end\]

캡쳐 안에 가운데에 텍스트를 넣습니다.

해설 (3)
해결책
\[start\]\s*(((?!\[start\]|\[end\]).)+)\s*\[end\]

이렇게 하면 [start][end] 마커도 삭제될 것입니다.

해설 (1)
$text ="Data Data Data start Data i want end Data";
($content) = $text =~ m/ start (.*) end /;
print $content;

난 이미 비슷한 문제를 해결하기 위해 귈이예요 &amp. 이 방법은 알아요.

해설 (0)

사용할 수 있지만 정규식이 열고 닫는 주기표시 간에 데이터를 분석할 수 있다고 이 경로를 따라 길고 힘든 것인지, you need to you want to go down. 이것이 가능한 이유는 주기표시 네스트하기: 만약 그런 일이 일어날 수 있다 '고 주기표시 중첩하기 판매업체에서 않거나, 언어, 일반 표현식에서는 판매업체에서 더 이상 제공되지 않아 일반 포지셔닝합니다 이벤트수정적절한 구문 분석 툴을 사용할 수 있습니다.

39 의 정규 표현식 구현 등 많은 정규식이 PCRE 또는 perl&, 지원 퇴각검색 황삭 이를 사용할 수 있는 효과를 얻을 수 있습니다. 하지만 PCRE doesn& 퇴각검색 (probabilistic perl), t # 39 에서 이상한 방법으로 모두 지원, 이 경우 발생할 수 있는 대로 실제로 셨으며 분할하려면 태그가 너무 많습니다.

39 의 there& 매우 흔히 있는 블로그 포스트를 더 ich5r 이 가장 많았고, http://kore-nordmann.de/blog/do_NOT_parse_using_regexp.html (google it · 확인할 수 있을 것으로 보인다며 현재 그들은 캐시에는 여개를 다운타임이)

해설 (0)

보다 자세한 논의는 찾기 위해 특히 사용하는 정규 표현식 매칭 주기표시 usb.: http://faq.perl.org/perlfaq4.html # How_do_I_find_matchi&gt <;). 특히 중첩할 주기표시 정말 필요한 위해 본격적인 파서 제대로 해석할 수 있다는 점에 주의해야 합니다.

참고로 대소문자 비활성화해야 질문에 답해야 할 위해 이다. , I s # 39 의 펄, that& 수정자의:

$ echo "Data Data Data [Start] Data i want [End] Data" \
  | perl -ne '/\[start\](.*?)\[end\]/i; print "$1\n"'
 Data i want 
  • 다른 기법을 사용할 수 있는 것은 가능 한정 끕니다 캡처됩니다 탐욕 of the match). 예를 들어, 일치하지 않는 경우에는 [말] * 태그:
Data Data [Start] Data i want [End] Data [end]

39, t 캡처하려면 don& 것입니다.

 Data i want [End] Data
해설 (0)

뭐, 보장할 수 있는 경우 각 시작 태그 뒤에는 종료 태그 다음 협력할 것이라고 말했다.

\[start\](.*?)\[end\]

그러나 같은 경우 복잡한 텍스트 때라도:

[start] sometext [start] sometext2 [end] sometext [end]

그럼 regex 문제를 경험할 수 있을 것 "이라고 말했다.

이제 다음 예제에서는 당기십시오 out all the 핫 링크 페이지에 했다.

'//i'

위의 경우 우리는 모든 것을 보장할 수 없다고 네스트된 건의:

'<a></a>'

따라서 이 매우 복잡한 질문 및 can& # 39 로 간편하게 해결할 수 없다, 그냥 그 답이 있다.

해설 (0)

Perl을 사용하면 원하는 데이터를 ()로 둘러싸고 나중에 꺼낼 수 있으며, 다른 언어에도 비슷한 기능이 있을 수 있습니다.

if ($s_output =~ /(data data data data START(data data data)END (data data)/) 
{
    $dataAllOfIt = $1;      # 1 full string
    $dataInMiddle = $2;     # 2 Middle Data
    $dataAtEnd = $3;        # 3 End Data
}
해설 (0)

이 질문에 가져오기할 아웃해야 태그 사이의 공백 문자 () 는 함께 텍스트 및 점 ('.')

' [\S\s]' 는 한 아이 유즈드

https://stackoverflow.com/questions/8303488/regex-to-match-any-character-including-new-lines

해설 (0)

읽고 있는 [] [시작] 및 [말] 즉 텍스트에서처럼 대괄호의 및 검증하십시오 바뀌엇어요 어레이에는 값. , jsfiddle*&l /b&gt b&gt <;; http://jsfiddle.net/muralinarisetty/r4s4wxj4/1/

var mergeFields = ["[sitename]",
                   "[daystoholdquote]",
                   "[expires]",
                   "[firstname]",
                   "[lastname]",
                   "[sitephonenumber]",
                   "[hoh_firstname]",
                   "[hoh_lastname]"];       

var str = "fee [sitename] [firstname] \
sdfasd [lastname] ";
var res = validateMeargeFileds(str);
console.log(res);

function validateMeargeFileds(input) {
    var re = /\[\w+]/ig;
    var isValid;
    var myArray = input.match(re);

    try{
        if (myArray.length > 0) {
            myArray.forEach(function (field) {

                isValid = isMergeField(field);

                if (!isValid){
                   throw e;                        
                }
            });
        }
    }
    catch(e) {        
    }

    return isValid;
}

function isMergeField(mergefield) {
    return mergeFields.indexOf(mergefield.toLowerCase()) > -1;
}
해설 (0)