정규 표현 식 이 html 태그 와 일치 하 는 속성 값

정규 표현 식 은 텍스트 해석 작업 을 하 는 데 없어 서 는 안 될 기능 입 니 다.예 를 들 어 웹 서버 로그 분석,웹 페이지 전단 개발 등 이다.많은 고급 텍스트 편집기 들 이 정규 표현 식 의 키 집합 을 지원 합 니 다.정규 표현 식 을 능숙 하 게 파악 하면 항상 적은 노력 으로 큰 효 과 를 거 둘 수 있 습 니 다.예 를 들 어 코드 줄 수 를 통계 하려 면 하나의 정규 만 있 으 면 된다.Html 태그 가 포 함 된 매 칭 은 정규 표현 식 응용 에서 비교적 어 려 운 화제 입 니 다.정규 문법 이 많 고 어렵 기 때 문 입 니 다.그래서 더 연구 할 가치 가 있다.
오늘 은 작업 의 수요 로 html 라벨 의 속성 값 을 가 져 와 야 합 니 다.바로 정규 표현 식 이 생각 났 습 니 다.라벨 은 다음 과 같 습 니 다.

<circle id="ap_test" cx="200" cy="2000" r="2" stroke="black" stroke-width="0" fill="red"/>
<circle id="ap_test" cx="201" cy="2001" r="2" stroke="black" stroke-width="0" fill="red"/>
<circle id="ap_test" cx="202" cy="2002" r="2" stroke="black" stroke-width="0" fill="red"/>
<circle id="ap_test" cx="203" cy="2003" r="2" stroke="black" stroke-width="0" fill="red"/>
탭 의 cx,cy 속성 값 을 가 져 와 야 합 니 다.생각 하 다가 다음 을 썼 습 니 다.
$circle 은 위의 circle 태그 의 내용 입 니 다.

preg_match_all('/<\s*circle\s+[^>]*?cx\s*=\s*(\'|\")(.*?)\\1[^>]*?cy\s*=\s*(\'|\")(.*?)\\1[^>]*?\/?\s*>/i', $circle, $arr);
var_dump($arr);
$arr[2]는 cx 의 값 이 고$arr[4]는 cy 의 값 입 니 다.
다음은 닫 힌 HTML 탭 과 정규 일치 하 는 것 을 소개 합 니 다.(끼 워 넣 기 지원)
모든 복잡 한 정규 표현 식 은 간단 한 하위 표현 식 으로 구성 되 어 있 습 니 다.복잡 한 정규 표현 식 을 쓰 려 면 한편 으로 는 복잡 하고 간단 한 기초 가 필요 합 니 다.다른 한편,우 리 는 정규 엔진 의 측면 에서 문 제 를 생각해 야 합 니 다.정규 엔진 의 원리 에 대해 서 는 중국어 이름 인 을 추천 합 니 다.괜 찮 은 책 이에 요.
OK,먼저 우리 가 해결 해 야 할 문 제 를 확인 합 니 다.Html 텍스트 에서 특정한 id 라벨 의 innerHTML 을 찾 습 니 다.
이 중 가장 큰 난점 은 Html 태그 가 내장 되 어 있 는 것 입 니 다.지정 한 태그 에 해당 하 는 닫 힌 태 그 를 어떻게 찾 을 수 있 습 니까?
우 리 는 이렇게 생각 할 수 있 습 니 다.먼저 맨 앞 에 있 는 시작 탭 과 일치 합 니 다.div 라 고 가정 하 십시오(내 가 이렇게 생각 할 수 있 는 이 유 는 내 가 정규 의 특성 을 알 고 정규 중의 균형 팀 이 내 가 방금 말 한'스 택'작업 을 실현 할 수 있다 는 것 을 알 기 때문이다.따라서 우리 가 복잡 한 정규 표현 식 을 만 들 려 면 정규 의 일부 고급 특성 에 대해 적어도 알 아야 한다.그러면 우 리 는 문 제 를 생각 하 는 데 방향 이 있 을 것 이다.
================================
HTML 탭 을 임의로 닫 는 정규 표현 식 과 일치 합 니 다:

<(?<HtmlTag>[\w]+)[^>]*?>((?<Nested><\k<HtmlTag>[^>]*>)|</\k<HtmlTag>>(?<-Nested>)|.*?)*</\k<HtmlTag>>
div 태그 만 일치 하려 면 다음 정규 표현 식 을 사용 하 십시오:

<(?<HtmlTag>div)[^>]*?>((?<Nested><\k<HtmlTag>[^>]*>)|</\k<HtmlTag>>(?<-Nested>)|.*?)*</\k<HtmlTag>>
네,일치 하 는 HTML 탭 으로 div 를 수정 할 수 있 습 니 다.
여러 HTML 탭 과 일치 하려 면 다음 정규 표현 식 을 사용 하 십시오.
<(?(div|span|h1))[^>]*?>((?<\k[^>]*>)|>(?<-Nested>)|.*?)*>
일치 하 는 탭 을 계속 추가 할 수 있 습 니 다.
ID 가 포 함 된 탭 과 일치 하려 면 다음 정규 표현 식 을 사용 하 십시오.

<(?<HtmlTag>[\w]+)[^>]*\s[iI][dD]=(?<Quote>["']?)footer(?(Quote)\k<Quote>)[^>]*?(/>|>((?<Nested><\k<HtmlTag>[^>]*>)|</\k<HtmlTag>>(?<-Nested>)|.*?)*</\k<HtmlTag>>)
이 정규 는 임의의 id 가 footer 인 HTML 탭 과 일치 합 니 다.

좋은 웹페이지 즐겨찾기