2015-04-19 58 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=•;3uëÖ‘Ïç)—Ëœ{î¹<üðó 

--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