다음 형식의 파일이 있습니다:
데이터 데이터 데이터 [시작] 원하는 데이터 [End] 데이터
정규식을 사용하여 '[시작]태그와 '[끝]
태그 사이에서 원하는 데이터
를 가져오고 싶습니다. 누구든지 이 작업을 수행하는 방법을 보여줄 수 있나요?
\[start\](.*?)\[end\]
캡쳐 안에 가운데에 텍스트를 넣습니다.
사용할 수 있지만 정규식이 열고 닫는 주기표시 간에 데이터를 분석할 수 있다고 이 경로를 따라 길고 힘든 것인지, you need to you want to go down. 이것이 가능한 이유는 주기표시 네스트하기: 만약 그런 일이 일어날 수 있다 '고 주기표시 중첩하기 판매업체에서 않거나, 언어, 일반 표현식에서는 판매업체에서 더 이상 제공되지 않아 일반 포지셔닝합니다 이벤트수정적절한 구문 분석 툴을 사용할 수 있습니다.
보다 자세한 논의는 찾기 위해 특히 사용하는 정규 표현식 매칭 주기표시 usb.: http://faq.perl.org/perlfaq4.html # How_do_I_find_matchi> <;). 특히 중첩할 주기표시 정말 필요한 위해 본격적인 파서 제대로 해석할 수 있다는 점에 주의해야 합니다.
참고로 대소문자 비활성화해야 질문에 답해야 할 위해 이다. , 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
Data Data [Start] Data i want [End] Data [end]
Data i want [End] Data
뭐, 보장할 수 있는 경우 각 시작 태그 뒤에는 종료 태그 다음 협력할 것이라고 말했다.
\[start\](.*?)\[end\]
그러나 같은 경우 복잡한 텍스트 때라도:
[start] sometext [start] sometext2 [end] sometext [end]
그럼 regex 문제를 경험할 수 있을 것 "이라고 말했다.
이제 다음 예제에서는 당기십시오 out all the 핫 링크 페이지에 했다.
'/<a(.*?)a>/i'
위의 경우 우리는 모든 것을 보장할 수 없다고 네스트된 건의:
'<a></a>'
따라서 이 매우 복잡한 질문 및 can& # 39 로 간편하게 해결할 수 없다, 그냥 그 답이 있다.
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
}
이 질문에 가져오기할 아웃해야 태그 사이의 공백 문자 () 는 함께 텍스트 및 점 ('.')
' [\S\s]' 는 한 아이 유즈드
https://stackoverflow.com/questions/8303488/regex-to-match-any-character-including-new-lines
읽고 있는 [] [시작] 및 [말] 즉 텍스트에서처럼 대괄호의 및 검증하십시오 바뀌엇어요 어레이에는 값. , jsfiddle*&l /b> b> <;;
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;
}