2015-04-19 88 views
-2

我正在閱讀PERL腳本中的一堆文件:css,html,js,png,jpg,我只想打印文本。該腳本使用這個正則表達式:正則表達式忽略特殊的ASCII字符

if($substring4 =~ /[A-Za-z0-9 \t\n\r]/) 
{ 
    print("GOOD ...\n"); 
    print($buffer); 
} 
else 
{ 
    print("INVALID ...\n"); 
    print($buffer); 
    print("\n\n"); 
} 

女巫都不盡如人意:

標記爲好:

--G=154 W=164 F=168 L=512-- 
GOOD ... 
unload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEven 

--G=155 W=165 F=169 L=512-- 
GOOD ... ===> GOOD, it must accept those characters 
t=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancel 

--G=156 W=166 F=170 L=512-- 
GOOD ... ===> GOOD, it must accept those characters 
Bubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.ev 

標記爲無效時,應arked爲好,有是正常字符那裏,你發現在鍵盤上:

INVALID ... ===> WRONG, it must accept those characters 
/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delet 

INVALID ... ===> WRONG, it must accept those characters 
""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(

是比較好的,但必須從SSL證書的圖像標記爲壞,有線字符...

--G=722 W=723 F=749 L=512-- 
GOOD ... ===> WRONG, it must skip those characters, mark them as bad character 
£©4Óô]>E‘Ÿ0AN=Går™ÉÉI²µ0ô ªªÒÒÒB"‘ ‹Õ-ûÚ×¾V'ü®¼òJxàz{{ë\+1Óñ>Ÿßþíߦ³³「Ûn»T*…ëºüþïÿ>K—.eË–-}˜‹ùåá」âåüÃA½yBpðŠw‘mïd㯟Ã0+³Ë~äájàÝ÷êéõÇ:~<EÁ±†¢é¡P„ñÔ(¥R‘þeç`š&「「D"ú–,edd„J¹L1B+[」 
¹ª ,9xð @µ:«iúŽ ãxa›.™Lšó×\À¦ËÞmšDÚâ2–JQÌÑ[[)UòÅRM„+57¸ZYÔÐTÎ]Þ˲žv†F’âÀ¡A†F’ÕF쮋¦iâò ‚°håÿgïÍãä¨ëüÿgÝÕÇô\=÷ä"„%‚«‚(ä0(‚úÔwYýŠ+»®« +*ÊOEQÔu¿_—å'‡À*» ‚,"§ˆrGH$dÎÌÝ÷Qç÷êª©é™ dfrÔ3JuWW×çÓ=]UŸ×ç}½ð¼ðÂ<ýôÓ¼üòËŒ「ÉdÈf³X–53ž ÐØØHcc#étš•+Wò¦7½‰ÉÉI¾ùÍoû……_ÄÎáÀSO=•;ï¼「uëÖ‘Ïç)—Ëœ{î¹<üðó 

--G=723 W=724 F=750 L=512-- 
INVALID ... ===> GOOD, it must skip those characters, mark them as bad character, i don't know why here is working 
,¨û+Ñ]4""bIð­põq€a (Š>„Çšš9ò¡{Iò»ÜŽ»ù%ŠŸ»ûŸ.Fÿ‹Ã‚ãî³ÐuA&ˆ"í]à:H²— EQ5Ç%›ÍÏçH&’Ȳˆ$ 
ä²’©®£T¥\©`T«<÷ÜslÛ¶\.G6› 
Jxø³Ú…|ž|.Çú³Ï£©¹Ë²hIÆ(—˼üòTY&‹‘ÏeÉçstvõ Ë 
ã£4¤Ñc1,Û¦û-üá‰gx~ãKàz¿Q’ˆòuFDD,óÅÕmܸ‘{{§žzŠÁÁÁ]:v>Ÿg`ÀixðÁ¹öÚkg¼¾víZn»í¶ÂoŸ½_í&ê¿Ÿ7¿ùÍÜxãœsÎ9T*&&&øÈG>Â<0Ëâº?‰¿ˆˆˆ%cGq€õÀ‚$ñä©ë9ø÷¾¦[email protected]²*_ûö‡Ï'~ú»÷Ù8ÀZ5¾ AeÛ6‘%™öö.ª¦®é¤Óí$「)ôXèÒÝÝÍÈÈ(åR‘TcŽš`t ×u1「‘‘LÓ¤Z­Ö?Çq0M「¾mÛXsèZÞúöu¸ŽW€=•TÎÒØÜ‚}¸£ IDAT"Iˆ’„išH¢ˆã:ò9&'ÇM÷ŠÑ[Ž—f*「Ŷt-Êj±øÔß,ËâW¿ú 

我想接受,你可以在html找到所有字符正則表達式,xmljson,css文件,但不包括像sÎ9T*&&&øÈG>Â<0Ëâº?‰¿ˆˆˆ%cGq€õÀ‚$ñä這樣的文件,可以在閱讀圖片時找到。

我CURENT正則表達式是:

/[A-Za-z0-9 \t\n\r]/

我到底做錯了什麼?

謝謝。

+1

我不明白你說的樣品被標記爲「好」或「無效」。你是說你在測試這些代碼字符串嗎?你正在測試'$ substring4',但是你的測試打印出'$ buffer',所以我們看不到被測試的字符串 – Borodin

回答

0

你可能想選擇了僅由可見ASCII字符和/或\t\r線,\n

if ($substring4 =~ m/\A [\x09\x0A\x0D\x20-\x7E]* \z/xms) { 
    print STDOUT "GOOD ...\n"; 
} 

備註

  • 全行必須匹配:*
  • \n\r不在perl的便攜,使用\x0A\x0D代替
  • ms和錨\A\z推薦用於二進制模式
  • 改性劑x允許格式化正則表達式(空白忽略)
  • 改性劑
+0

*「修飾符'ms'和錨''A','\ z'建議用於二進制模式」*這是不正確的。修飾符'/ m'和'/ s'隻影響元字符'^',''''和'.'的行爲,而且你的模式中沒有這些元素。 '\ A'在存在'/ m'的情況下與'^'只有不同,對'\ z'也是如此,除非在字符串末尾的換行符之前避免匹配 – Borodin

+0

上面的擴展是完全正確的。在Perl最佳實踐中,Damian Conway建議始終使用修飾符'xms'和錨''A'' \ z'。任何人都可以同意或不同意,這只是一個建議。 – Loic

+0

PBP現在已經過時了,但在這方面沒有任何改變。但它與*無關「*二進制模式*無論他們可能是什麼 – Borodin

0

目前尚不清楚您要求的內容,但您可以嘗試檢查任何非ASCII字符,或符號或尖括號。

喜歡這個

if ($buffer =~ /[\P{ascii}&<>]/) { 
    print "INVALID\n"; 
} 
else { 
    print "GOOD\n"; 
} 
print $buffer, "\n\n"; 
+0

感謝你的回答,但現在它使我一直無效http:// pastebin。com/QPHDZFje – Damian

+0

@Damian:好的,但你還沒有解釋你正在測試的數據以及'$ substring4'是什麼。我需要一個不正確的數據作爲無效的例子。你的pastebin是什麼?這是'$ buffer'的內容嗎?因爲這個 – Borodin

+0

中沒有無效字符,所以非常感謝你的回答,但是我切換到'node.js' ...更穩定更快,用'perl'我當時無法查看2個站點,'node .js'我可以... – Damian