{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "### 5-3-6 先読みと後よみ" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "#" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "#pattern = /(?<=丁目)(\\d+)(?=番地)/\n", "pattern = /(?:丁目)(\\d+)(?:番地)/\n", "\n", "pattern.match('神奈川県川崎市川崎区大宮町2丁目10番地')" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "#" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pattern = /(?<=丁目)(\\d+)(?=番地)/\n", "\n", "pattern.match('神奈川県川崎市川崎区大宮町2丁目10番地')" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "#" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pattern = /(?<=丁目)(\\d+)/\n", "\n", "pattern.match('神奈川県川崎市川崎区大宮町2丁目10番地')" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "#" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pattern = /(?:丁目)(\\d+)/\n", "\n", "pattern.match('神奈川県川崎市川崎区大宮町2丁目10番地')" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "nil\n" ] }, { "data": { "text/plain": [ "#" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pattern = /(?\\d{2}-\\d{2})/\n", "\n", "p pattern.match('2012-01-01')\n", "pattern.match('2016-01-01')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 5-3-7 バックトラックの抑止" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\"ruby\"\n", "\"ruby3x3\"\n" ] }, { "data": { "text/plain": [ "\"ruby3x3\"" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pattern = /(\\w+)/\n", "\n", "p pattern.match('ruby')[1]\n", "p pattern.match('ruby3x3')[1]" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "nil\n", "#\n" ] }, { "data": { "text/plain": [ "#" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pattern = /(\\w+)[0-9]/\n", "\n", "p pattern.match('ruby')\n", "p pattern.match('ruby5')[1] # 本は => \"ruby5\" とあるが誤植" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "false" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pattern = /(?>\\w+)[0-9]/\n", "\n", "pattern === 'ruby5'" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "true" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pattern = /(?>\\w+)[0-9$]/\n", "\n", "pattern === 'ruby3$3'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 5-3-8 オプションの指定" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "/ruby/mi" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "/ruby/mi\n", "\n", "%r(ruby)mi" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[/foo/, /bar/]\n" ] }, { "data": { "text/plain": [ "[/foo/, /foo/]" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p %w(foo bar).map { |str| /#{str}/}\n", "%w(foo bar).map { |str| /#{str}/o}" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "false\n", "true\n" ] }, { "data": { "text/plain": [ "true" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "r = /R(?i)uby(?-i)/ # i オプションは -iがくるまでずっと有効\n", "\n", "p r === 'ruby'\n", "p r === 'Ruby'\n", "r === 'RUBY'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "次回は \"5-4 Comparable\"から" ] } ], "metadata": { "kernelspec": { "display_name": "Ruby 2.2.2", "language": "ruby", "name": "ruby" }, "language_info": { "file_extension": "rb", "mimetype": "application/x-ruby", "name": "ruby", "version": "2.2.2" } }, "nbformat": 4, "nbformat_minor": 1 }