2009-08-11 8 views
1

웹 페이지 세트를 새로운 시스템으로 업그레이드하고 각 페이지 상단의 상용구를 제거하고 교체하고 새로운 상용구로 교체하려고합니다. 다행히도 각 페이지에는 내용 표가 있으며 앞에는 표가 없습니다. 나는 다음과 같이하고 싶다 :HTML 문서에서 테이블을 제거하려면 어떻게해야합니까?

$contents =~ s/^.*<table/$newHeader/ 

이것은 $ 내용의 첫 번째 줄에서만 작동한다. 파일의 첫 번째 < 테이블을 새 상용구로 바꾸기 전에 모든 것을 바꿀 수 있습니까?

답변

7

당신은 ".는" 줄 바꿈 (하나의 거대한 라인으로 대신 당 라인의 문자열 거래)를 포함 모든 문자 일치를 알려줍니다 펄의 "/s"옵션을 사용할 수 있습니다. 당신이해야 할 것 "<table"그래서 대체는 또한 텍스트를 제거 것이라는 점을 기억

$contents =~ s/^.*?<table/$newHeader/s 

을 또한 : 당신은 * 비 욕심 만들기 위해 ? 정량을 사용하여 첫 번째 테이블에 일치하는 제한 그것은 가능성과, 어떻게 든 다시 삽입됩니다 있는지 확인하십시오

$contents =~ s/^.*?<table/<table$newHeader/s 

또는 당신은하지만 텍스트 "경기,이 표현도 일치해야합니다 다음"라는 제로 폭 긍정적 인 모습 미리 주장을 사용할 수 있습니다 미리보기 주장은 일치 항목의 일부로 간주되지 않으므로 (따라서 대체되지 않습니다) :

그러면 "<table"이 그대로 유지됩니다.

+0

Perfect. 감사! –

+1

좋은 답변이지만 완벽하지는 않습니다./s 옵션이 점과 일치하는 공백을 만들 것이라는 것은 정확하지 않습니다. 도트는 옵션이 없더라도 공백을 정확하게 일치시킵니다. "공백"을 "줄 바꿈"으로 바꾸면 실제로 그 답이 완벽합니다. – innaM

+0

@Manni : 당신이 맞고 고정되어 있습니다. –

3

"." 일반적으로 개행 문자를 제외한 모든 문자와 일치합니다. 여러 줄에 걸쳐 일치 시키려면 "s"를 정규 표현식에 추가하십시오.

$contents =~ s/^.*?<table/$newHeader/s; 
관련 문제