내 컴퓨터의 "input.txt" 텍스트 파일에서 입력을 받아 결과를 "output.txt" 텍스트 파일로 출력하도록 다음 스크립트를 적용하려고 합니다.
스크립트는 인터넷에서 HTML을 가져오는 데는 잘 작동하지만 필요한 적응을 파악할 수 없습니다.
이상한 점은 제가 1년 전에 그것을 알아냈다는 것입니다. 하지만 제가 무엇을 했는지 기억이 나지 않습니다. 저는 프로그래머가 아닙니다.
암호:
url='http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags'
curl -s "$url" |
sed -Ene:n -etD \
-e's/ ?[^ "]*"[^"]*"//g;/"/'bN \
-e's/[[:space:]]*($|<)/\n\1/' \
-e'/^Moderator.s Note/q' \
-e'/.\n/P;/\n</!t' -e:D \
-e'/\n/D;/^<script>/!s/>/&\n/' \
-e'/\n/!s/<\/script>/\n/' -e:N \
-e'/\n/!{N;s///;}' -e//tD -etn
답변1
HTML 파일에서 자바스크립트를 제거하고 일반 텍스트를 유지하는 방법은 무엇입니까?
이는 정규식을 사용하여 토큰 및 유지 관리 가능성을 구문 분석하는 것과 관련된 또 다른 문제를 강조한다고 생각하기 때문에 흥미로운 질문입니다.
이 스크립트는 시스템에 PHP를 사용할 수 있는 경우 이 작업을 수행합니다.
#!/usr/local/bin/php
# point the #! to wherever your PHP commandline binary is
<?php
error_reporting(1);
$html = file_get_contents('http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags');
// create an object representing the DOM tree of the webpage
$document = new DOMDocument;
$document->loadHTML($html);
// store the <script> elements as a DOMN
$script_nodes = $document->getElementsByTagName('script');
// For some reason you can't use the DOMNode::removeChild method
// when iterating through an instance of PHP's DOMNodeList
// so use an array to queue the values in. see
// http://php.net/manual/en/domnode.removechild.php
$scripts_to_remove = [];
for ( $i=0; $i < $script_nodes->length; $i++ ) {
$scripts_to_remove[] = $script_nodes->item($i);
}
// now we can iterate through the <script> nodes removing them
foreach ( $scripts_to_remove as $s_node ) {
$parent = $s_node->parentNode;
$parent->removeChild($s_node);
}
// print out the new DOM as HTML
echo $document->saveHTML();
용법
스크립트를 사용하려면 위 코드가 포함된 파일을 설정하고 실행 가능하게 만든 다음 실행하고 태그가 제거된 HTML을 포함해야 하는 파일로 출력을 리디렉션합니다 <script>
.