æ£è¦è¡¨ç¾(regular expression)ã¯æååã®ãã¿ã¼ã³ãè¨è¿°ããããã®è¨èªã§ãã ã¾ãããã®è¨èªã§è¨è¿°ããããã¿ã¼ã³ãæ£è¦è¡¨ç¾ã¨å¼ã³ã¾ãã æ£è¦è¡¨ç¾ãç¨ããã¨ãæååãæå®ãããã¿ã¼ã³ãå«ãã§ãããã©ãããå¤å®ãã ã¾ãå«ãã§ãããªãã°ãããæååä¸ã®ã©ã®å ´æã§ããããç¥ããã¨ãã§ãã¾ãã /pat/ %r{pat} ãªã©ã®æ£è¦è¡¨ç¾ãªãã©ã«ã Regexp.new ãªã©ã§æ£è¦è¡¨ç¾ ãªãã¸ã§ã¯ããå¾ããã¨ãã§ãã¾ãã ã¡ã¿æååã¨ãªãã©ã«ãã¡ã¿æåã¨ã¨ã¹ã±ã¼ã æ£è¦è¡¨ç¾ã®ææ³ã«ã¯ãæ£è¦è¡¨ç¾å ã§ç¹å¥ãªåããããæååã¨ããã以å¤ã® ãã®æååãã®ãã®ã«ããããããããªæååãããã¾ãã åè ãã¡ã¿æåå(meta string)ãå¾è ããªãã©ã«(æåå)(literal string)ã¨å¼ã³ã¾ãã /京é½|大éª|ç¥æ¸/ ã¨ããæ£è¦è¡¨ç¾ã«ããã¦ã¯ãã京é½ãã大éªããç¥æ¸ãããªãã©ã«ã§
= ç¾ç¶ã®éäºæã«ã¤ã㦠Rubyã¸ã®åãè¾¼ã¿æ¹: cd Onigmo cp reg{comp,enc,error,exec,parse,syntax}.c reg{enc,int,parse}.h ~/ruby cp oniguruma.h ~/ruby/include/ruby/ Onigmo: edf9df1cefc28472085a857116153529253ffab5 (tmp/ruby-2.0.x) Ruby: r34150 Failure: test_parse_utf8(TestDateParse) [/home/naruse/ruby/test/date/test_date_parse.rb:651]: <"æ¥æ¬"> expected but was . åå : è§£æã«æ£è¦è¡¨ç¾ãç¨ãã¦ããã [:alpha:] ã ASCII ã«ãããããããªãåé¡ãè¸ãã§ããã Fa
ä»ã¾ã§ããã¥ã¡ã³ãããã¾ãèªãã§ããªãã£ãããã«ãVimã§ã®æçä¸è´ã®ããæ¹ãä»ã²ã¨ã¤åãããªãã£ãã®ã ããå°ã調ã¹ããããã«åãã£ãã æçä¸è´ ä»ã¾ã§èª¬æããç¹°ãè¿ãæå®ã¯ãå¯è½ãªéãããããã®æååã«ããããããã¨ãã¾ããã§ããã ãå°ãªãåæ°ã ãããããããã«ã¯ "\{-n,m}" ã使ãã¾ããåä½ã¯"\{n,m}" ã¨ã»ã¨ãã©åãã§ãããæçä¸è´ã使ããã¾ãã ä¾ /ab\{-1,3} "abbbb" ã®ä¸ã® "ab" ã ããããããã¾ããä¸ã¤ã® "b" ã«ãããããã ãã§æ¡ä»¶ãæºããã®ã§ãäºã¤ç®ä»¥éã® "b" ã«ã¯çµ¶å¯¾ã«ããããã¾ãããå¾ãã«ä»ã®ãã¿ã¼ã³ãç¶ãã¦ãããªãæå°åæ°ä»¥ä¸ã®æåã«ãããããã¾ãã "n" 㨠"m" ãçç¥ããå ´åãåãã«ã¼ã«ãé©ç¨ããã¾ãã両æ¹ã®æ°åãçç¥ãã¦"\{-}" ã¨ãããã¨ãã§ãã¾ããããã¯ç´åã®æåã 0 å以ä¸ç¹°ãè¿ããã¦ããå ´åã«æå°ã®
ç ç©¶ç®çã¨èæ¯ (1) å½ç 究室ã§ã¯, ç¶ç¶ãåºæ¬ã¨ããããã°ã©ãã³ã°è¨èª Continuation based C (CbC)ãéçºãã¦ãã. ãã®è¨èªã¯, Cãã颿°å¼ã³åºãã for ã«ã¼ãå¶å¾¡ãªã©ããè¦ã, åçã®åä½ã¯ãã¹ã¦ç¶ç¶ã§ãç¨ãã¦å®ç¾ãããã¨ã§, Cãããç´°ããåä½ãå¯è½ã«ãã¦ãã. æ¬ç ç©¶ã§ã¯, CbC ã®ç¹å¾´ãçããä¾é¡ã¨ãã¦, æ£è¦è¡¨ç¾ã¨ã³ã¸ã³ã«çç®ãã. ç ç©¶ç®çã¨èæ¯ (2) ã·ã³ãã«ã§ä¿å®æ§ã«åªã, ãã¤æ§è½ã®é«ãæ£è¦è¡¨ç¾ã¨ã³ã¸ã³ã®å®è£ ãæã¾ãã. çç£æ§ã®é«ãè¨èªã«ãã£ã¦å®è£ ããããã°ã©ã (çæç³»)ãã, æ½è±¡åº¦ãä½ãæ§è½ã®é«ãè¨èª(CbC/C/Assembly)ã®ã³ã¼ãçæãè¡ãããã°ã©ãã³ã°ææ³ããã. ãã®ææ³ã§ã¯, æ§è½ãä¿ã£ãã¾ã¾éçºå¹çã«åªããã¨ããå©ç¹ããã. ããã§æ¬ç ç©¶ã§ã¯, ä¸ããããæ£è¦è¡¨ç¾ãèªèããCbCã«ãã£ã¦è¨è¿°ãããã½ã¼ã¹
æ¬å½ã§ã. ä¸çæéã®grep ä½ãã¾ãã. ãã®ãã¿ã§å¦ä¼çºè¡¨ã¨ããã¾ãã. #=> JSSST, ããã°ã©ãã³ã°ã»ã·ã³ãã¸ã¦ã ãåçãªã³ã¼ãçæãç¨ããæ£è¦è¡¨ç¾ãããã£ã®å®è£ ã æè¿... ãä¸çæéã®grepãã¨ã¯ãããã§ãç 究室å ã§ç¸æã«ãããªããªã£ã¦ãã¾ãã. å 輩ãã¸ã, ãããªã®.ã ååãã¯ãã¯ãæéæé.ã å¾è¼©ãgrepã£ã¦ãªãã§ãã?ã å çããããªãã¨ãã並ååã¯? è±èªã§è«ææ¸ãã¦. PS3ä¸ã§åããã¦.....ã
ãã®ãã¢ã®ã½ã¼ã¹ãã¡ã¤ã«ã¯ GitHub ãªãã¸ããªã«æ ¼ç´ããã¦ãã¾ãããã¢ããã¸ã§ã¯ãã«ååãããå ´åã¯ã https://github.com/mdn/interactive-examples ãã¯ãã¼ã³ãã¦ãã«ãªã¯ã¨ã¹ããéä¿¡ãã¦ãã ããã æ§æ str.match(regexp) 弿° regexp æ£è¦è¡¨ç¾ãªãã¸ã§ã¯ãã§ãã regexp ã RegExp ã§ã¯ãªããªãã¸ã§ã¯ãã§ãã£ãå ´åã RegExp ã¸ã®æé»çãªå¤æã new RegExp(regexp) ã使ç¨ãã¦è¡ããã¾ãã ä¸å弿°ãä¸ããã« match() ã¡ã½ããã使ã£ãå ´åãç©ºã®æåå 1 ã¤ãæã¤ Arrayã [""] ãå¾ããã¾ãã è¿å¤ ã°ãã¼ãã« (g) ãã©ã°ã®æç¡ã«ãã£ã¦å 容ãå¤ãã Array ãè¿ãã¾ããä¸è´ãããã®ãè¦ã¤ãããªãã£ãå ´å㯠null ãè¿ãã¾ãã g ãã©ã°ããã£ãå ´åã¯ãæ£
exec() ã¡ã½ããã¯ãæå®ãããæååå ã§ä¸è´ãããã®ã®æ¤ç´¢ãå®è¡ãã¾ããçµæã®é åãã¾ã㯠null ãè¿ãã¾ãã global ã¾ã㯠sticky ãã©ã°ãæã¤ RegExp ãªãã¸ã§ã¯ãï¼ä¾ï¼ /foo/gã/foo/y ï¼ã¯ã¹ãã¼ããã«ã§ãã以åã®ããããã lastIndex ãä¿æãã¾ããString.prototype.match() ã¨ç°ãªããexec() 㯠lastIndex ãå é¨çã«ä½¿ããã¨ã«ãã£ã¦ãå復ãããã¨ã§ããã¹ãã®æååã«ããè¤æ°ã®ä¸è´ããã£ããã£ã°ã«ã¼ãã¨ã¨ãã«åå¾ã§ãã¾ãã æååã®ï¼ãã£ããã£ã°ã«ã¼ããå«ãã ï¼è¤æ°ã®ä¸è´ãç°¡åã«åå¾ã§ããæ°ãã颿°Â String.prototype.matchAll() ãææ¡ããã¦ãã¾ãã åã«è¦ã¤ãã£ããè¦ã¤ãããªãã£ãããç¥ãããã«ä¸è´ãå®è¡ããã®ã§ããã°ã RegExp.prototype.test()
Adobeã®ãµãã¼ããã¼ã¿ãã¼ã¹é¢ä¿ã®ãããããæ¸ãããæ·»åãã¦ããã£ããããçµæãæ°ãã«è¦ãããã¨ãããã®ã§ããã£ããã ããã¡ã¢ã£ã¦ããã¾ãã 以ä¸ã ãã ãã¨ç¶ããã©ãå®ã¯Mozilla Developer Centerè¦ãã°å ¨é¨æ¸ãã¦ããã®ã§ããã£ã¡è¦ãã»ããããã¨æãã¾ãã match - MDC exec - MDC String.matchã¨RegExp.exec String.matchã¨RegExp.execã¯ãã©ã¡ããæ£è¦è¡¨ç¾ã使ã£ã¦æååã®ãããã³ã°ãè¡ãã¡ã½ããã æ¤ç´¢ãè¡ã£ã¦ããããããæååãå¾ããã¨ãã«ä½¿ããããããããã©ããï¼ã¨ããããããä½ç½®ï¼ã ãã調ã¹ããã¨ãã¯ãä½åãªå¦çãããªãString.searchã¾ãã¯RegExp.testã使ã£ãã»ããéãã String.match(RegExp)ã¨RegExp.exec(String)ã¯ãæ£è¦è¡¨ç¾ã«gãªãã·ã§
str = "ABCDEF"; re = /DEF/ig; console.log(re.test(str)); // => true ãããã³ã° str.match(regexp) str ã«å¯¾ãã¦æ£è¦è¡¨ç¾ regexp ã§ãããã³ã°ãè¡ãçµæãè¿ãã¾ãããããããªãã£ãå ´å㯠null ãè¿ãã¾ãã const ret = "abc123".match(/[0-9]+/); console.log(ret); // => ['123', index:3, input:'abc123', groups:undefined] console.log(ret[0]); // ãããããæåå: '123' console.log(ret.index); // è¦ã¤ãã£ãå ´æã®ã¤ã³ããã¯ã¹: 3 console.log(ret.input); // å ¥åæåå: 'abc123' ã°ãã¼ãã«ã
Make a note of it: Web tech, montaineering, and so on. Note: ãã®è¨äºã¯ã3年以ä¸åã«æ¸ããã¦ãã¾ããWebã®é²åã¯éãï¼æ å ±ã®æ£ç¢ºæ§ã¯èªå·±è²¬ä»»ã§å¤æãã¦ãã ããã Vimã®æ£è¦è¡¨ç¾ãã¾ã¨ãã¦ã¿ã¾ãããVimã®æ£è¦è¡¨ç¾ã¯ââåºæ¬çã«ã³ãã³ãã¢ã¼ãã§ä½¿ããããââãããã¨ã¹ã±ã¼ããå¤ãã£ãããã¦ãã¡ããã¨ç¬ç¹ã§ããã¾ããæ¡å¼µæ£è¦è¡¨ç¾ã使ããªãã®ã§ãPerlã®ããªã§æ¸ãã¨ãããããã¾ããã以ä¸ãæ¤ç´¢ã«é¢ãããããªãªãã·ã§ã³è¨å®ã :set wrapscan
æ³¨ï¼ Rubyã¯2.1.0ããSemantic Versioningãæ¡ç¨ãã¦ãã¾ãã Ruby 2.1.1, 2.1.2çã¯ãã°ä¿®æ£ãã»ãã¥ãªãã£fixã®ã¿ãå«ãããããªãã¡ã¬ã³ã¹ã¨ãã¦ã¯2.1ã«çµ±ä¸ãã¦ãã¾ãã
eregex.vim ã¯ãPerl/Ruby ã§ä½¿ããã¦ããæ¡å¼µæ£è¦è¡¨ç¾ã Vim ã®æ£è¦è¡¨ç¾ã«å¤æããã¹ã¯ãªããã§ããåºæ¬çã«ãã鏿ããç¹°ãè¿ããã丸ã«ãã³ãã®æ±ããæ¡å¼µæ£è¦è¡¨ç¾æµã§ãããã®ä»ã¯ Vim ã®æ£è¦è¡¨ç¾ã«å¾ãã¾ãã æ¡å¼µæ£è¦è¡¨ç¾ã使ã£ã¦ã/, :s, :g, :v ã«ç¸å½ããã³ãã³ãã使ããããã«ãªãã¾ããããããã:M, :S, :G, :V ã§ãã eregex255.tar.gz ã®è§£åã¯ã$ tar -xvzf eregex255.tar.gzããããtar.gz ã«å¯¾å¿ããã½ããã® +Lhaca ã eo ã使ã£ã¦ä¸ããã ããã¥ã¡ã³ã㯠EUC-JP ã§ãã »eregex.vim ãã¦ã³ãã¼ããã¼ã¸
00:46 10/04/23 EDBT/ICDT 2010 å æ EDBT/ICDT 2010 ã¨ããå¦ä¼ã«è¡ã£ã¦ããã®ã§ãããããã«ã¤ãã¦ä½ãæ¸ãã¦ãªãã£ãã®ã§ä»é æ¸ãã¾ãã èªåããä¸ã¶æå¾ã«åããã¼ã¶ã³ãã«è¡ã£ã¦å´ç«ã«å·»ãè¾¼ã¾ãã¦å¸°å½ã¾ã§å»¶ã³ã¦ãã¾ã£ã¦ããã¿ããã¾ãããã帰ãã«ãªãããã¯æ©ãæ¸ããªãã¨çæ°åããªãã«ãããããã§ãã ãã¼ã¿ãã¼ã¹ã®ä¼è°ãªãã§ããã ãã¡ãã®åé㯠SIGMOD/PODS ã®æµãã§ã å®è£ å¯ãã®ä¼è°ã¨çè«ããã®ä¼è°ãåããã¦å ±åéå¬ãããã¼ã ãããã åå è ã¨ãã¦ã¯ãè²ããªå¹ åºããã¼ã¯ãè´ããã®ã¯åç´ã«æ¥½ããã®ã§ããã£ã¨åºã¾ãã¨é¢ç½ããã ãªãã¨æãã¾ããã ããã°ã©ãã³ã°è¨èªã§è¨ã㨠PLDI/POPL ã¨ããã¿ãããªãã®ã§ããããã ãããè¯ããã©ãã夿ã§ããã»ã©PLDIã®æ¹ã®é°å²æ°ãç¥ããªãã®ã§ãããã¾ãããã ãªã¼ãããã³æ¹é¢ã 㨠CIAA/DL
åç´ãªç¹å®æååã®åå¨ç¢ºèªãããã®ã« indexOf ã¨æ£è¦è¡¨ç¾ã§ã©ããããå·®ãããã®ããªã¨æã£ã¦ã次ã®ãããªã³ã¼ããæ¸ãã¾ããã (function(){ var a = [], n = 10000; for (var i = 0; i < n; i++) { a.push('item:' + i); } var str = a.join('\n'); var s = new Date(); for (var i = 0; i < 3000; i++) { //var m = str.indexOf('item:9999'); // (1) indexOf //var m = /item:9999/.exec(str); // (2) éçãªæ£è¦è¡¨ç¾ //var m = new RegExp('item:9999').exec(str); // (3) åççæã®æ£è¦è¡¨ç¾ //var m
ååã§çµããã¯ãã ã£ãæ¥ä»æ¸å¼æ£è¦è¡¨ç¾ï¼ãªãã¡ã©ãè¦ã¦ã¿ãã¨ãæ¥ä» æ£è¦è¡¨ç¾ 400ããããªæ¤ç´¢å¼ã§ããã£ã¦ã人ããã¦æå¿ãã¾ããï¼ãªãã»ã©ï¼ãããå¹´ãçé¢ç®ã«æ±ããã¨ããã¨400ã£ã¦æ°åãåºã¾ããããï¼éã«ãã®æ°åãåºãªãã¨æå¾ å¤ãã®çµæãå¾ãããããããï¼ ãã®æ¤ç´¢çµæããï¼ä»¥ä¸ã®2ã¤ãè¦ã¤ãã¾ããï¼ http://oraclesqlpuzzle.hp.infoseek.co.jp/regex/regex-4-3.html ^(?!([02468][1235679]|[13579][01345789])000229)( ([0-9]{4}(01|03|05|07|08|10|12)(0[1-9]|[12][0-9]|3[01]))| ([0-9]{4}(04|06|11)(0[1-9]|[12][0-9]|30))| ([0-9]{4}02(0[1-9]|1[0-9]|2[0-8]))
ãç¥ãã
ã©ã³ãã³ã°
ã©ã³ãã³ã°
ãªãªã¼ã¹ãé害æ å ±ãªã©ã®ãµã¼ãã¹ã®ãç¥ãã
ææ°ã®äººæ°ã¨ã³ããªã¼ã®é ä¿¡
å¦çãå®è¡ä¸ã§ã
j次ã®ããã¯ãã¼ã¯
kåã®ããã¯ãã¼ã¯
lãã¨ã§èªã
eã³ã¡ã³ãä¸è¦§ãéã
oãã¼ã¸ãéã
{{#tags}}- {{label}}
{{/tags}}