我有一個file
喜歡的東西perl的非貪婪正則表達式匹配的情況下過多
<post href="http://example.com/" description="Example website" tag="more text"/>
我想要得到的是Example website
。這樣做的:
cat file | perl -pe 's/.*description=".*?"//'
按預期工作,我也得到tag="more text"/>
,但是當試圖:
cat file | perl -pe 's/.*description="(.*)?"/\1/'
我得到Example website" tag="more text/>
,而我期待得到Example website
。所以看起來有些東西的捕捉和反向引用不能按預期工作,儘管我想我可能會理解爲什麼,但我不知道如何解決它。
我總是可以做:
cat file | perl -pe 's/.*description="//;s/".*//'
,但我真的想了解如何使用正則表達式解決的,而不是做兩個換人它。
**不要使用正則表達式來解析HTML。使用合適的HTML解析模塊**您無法可靠地使用正則表達式解析HTML,並且您將面臨悲傷和挫折。只要HTML從你的期望改變,你的代碼就會被破壞。請參閱http://htmlparsing.com/perl以獲取如何使用已經編寫,測試和調試的Perl模塊正確解析HTML的示例。 –
我知道我不應該試圖用正則表達式來解析HTML,但是這是從API調用中獲得的XML代碼,所以它不會偏離,因爲它已經只包含我感興趣的內容。如果API響應會發生變化,所以我的代碼必須適應,但是在這種情況下不會有任何不可預見的情況使正則表達式「危險」。 – user137369