プログラム言語 æ­£è¦è¡¨ç¾

概è¦

é€šå¸¸ã®æ–‡å­—列判定(Perl)
fnMatchCheck("I Love Perl");
→マッãƒ
fnMatchCheck("I love perl");
→マッãƒã—ãªã„
sub fnMatchCheck
{
  my $target = shift;
  if ($target eq "I Love Perl")
  {
    print "マッãƒï¼","\n";
  }
}

æ­£è¦è¡¨ç¾ã‚’用ã„ãŸåˆ¤å®š(Perl)
fnMatchCheck("I Love Perl");
→マッãƒ
fnMatchCheck("I love perl");
→マッãƒ
sub fnMatchCheck
{
  my $target = shift;
  if ($target =~ /I [lL]ove [pP]erl/)
  {
    print "マッãƒï¼","\n";
  }
}

基本形

using System.Text.RegularExpressions;

string[] strCheck = {
  @"C#", ⇒マッãƒï¼
  @"c#",
  @"C",
  @"c",
  @"I Love C#", ⇒マッãƒï¼
  @"VB.NET",
  @"Perl",
  @"abcde",
  @"abcC#de", ⇒マッãƒï¼
  };

Regex myReg = new Regex(pattern: @"C#");

foreach (string elm in strCheck)
{
  //elm 㯠"C#"ã‚’å«ã‚€ã‹ï¼Ÿ
  if (myReg.IsMatch(input: elm))
  {
    Console.WriteLine("マッãƒï¼");
  }
}

「@ã€ã¯ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—処ç†é˜²æ­¢
(「プログラム言語 変数/リテラルã€å‚ç…§)

import re

æ­£è¦è¡¨ç¾ãƒ‘ターンを定義
phone_num = re.compile(r'\d\d\d-\d\d\d\d-\d\d\d\d')

引数ã‹ã‚‰æ­£è¦è¡¨ç¾ãƒ‘ターンã«ãƒžãƒƒãƒã™ã‚‹å€¤ã‚’検索
mo = phone_num.search('ç§ã®é›»è©±ç•ªå·ã¯050-3695-5892ã§ã™')

マッãƒã—ãŸå€¤ã‚’å–å¾—
print('電話番å·ï¼š{phone_num}'.format(phone_num=mo.group()))
→電話番å·ï¼š050-3695-5892

ワイルドカード「.ã€æŽ¢ç´¢ã«æ”¹è¡Œã‚’å«ã‚ã‚‹
pattern = re.compile(r'文字列', re.DOTALL)

å¤§æ–‡å­—å°æ–‡å­—を区別ã›ãšæŽ¢ç´¢ã™ã‚‹
pattern = re.compile(r'文字列', re.IGNORECASE)
pattern = re.compile(r'文字列', re.I)

æ­£è¦è¡¨ç¾ã«ã¤ã„ã¦æ”¹è¡Œã€ã‚³ãƒ¡ãƒ³ãƒˆå¯èƒ½ã«
pattern = re.compile(r'文字列', re.VERBOSE)

オプションã®çµ„ã¿åˆã‚ã›(「|ã€ã§ç¹‹ã)
pattern = re.compile(r'文字列', re.DOTALL | re.IGNORECASE)

文字列 =~ /検索語/
文字列 㯠検索語 ã‚’å«ã‚€ã‹ï¼Ÿ

fnMatchCheck("I Love Perl");
→マッãƒï¼

sub fnMatchCheck
{
  my $target = shift;
  # $target 㯠Perl ã‚’å«ã‚€ã‹ï¼Ÿ
  if ($target =~ /Perl/)
  {
    print "マッãƒï¼","\n";
  }
}

å¦å®šå½¢
文字列 !~ /検索語/
文字列 㯠検索語 ã‚’å«ã¾ãªã„ã‹ï¼Ÿ

fnMatchCheck("I Love Perl");
→アンマッãƒï¼

sub fnMatchCheck
{
  my $target = shift;
  # $target 㯠Ruby ã‚’å«ã¾ãªã„ã‹ï¼Ÿ
  if ($target !~ /Ruby/)
  {
    print "アンマッãƒï¼","\n";
  }
}

æ­£è¦è¡¨ç¾

一覧

a*a

aã€aaã€9aã€a9

è¡¨ç¾ æ©Ÿèƒ½ 使用例 çµæžœ
. ä»»æ„ã®1文字 a.a a9aã€aaa
* ç›´å‰ã®1文字ã®0回以上ã®ç¹°ã‚Šè¿”ã—
.* ç›´å‰ã®1文字ã®1回以上ã®ç¹°ã‚Šè¿”ã— a.*a a99aã€a9aã€aaaã€aa
+ ç›´å‰ã®1文字ã®1回以上ã®ç¹°ã‚Šè¿”ã— a+a a99aã€a9aã€aa
? ç›´å‰ã®æ–‡å­—ã®0ã¾ãŸã¯1文字 a?a aaaã€aaã€9aa
^ 行ã®å…ˆé ­ ^a aaaã€aaã€a9
$ è¡Œã®æœ«å°¾ a$ aaaã€aaã€9a
[~] カッコ内ã®ä»»æ„ã®æ–‡å­— [123]
[1-3]ã‚‚å¯
a1ã€2aã€a123b
[^~] カッコ内ã®ä»»æ„ã®æ–‡å­—以外 [^1-3] aaã€9a
{n} n回繰り返㗠a{2} aaã€aaaã€9aaã€aa9
{n,} n回以上繰り返㗠a{2,} aaã€aaaã€9aaã€aa9
{n,m} n~m回繰り返㗠a{2,4} aaã€aaaã€aaaaã€9aaa
~1|~2 ~1 ã¾ãŸã¯ ~2 aa|99 aaaã€a99ã€aab99
\ 直後ã®ä¸€æ–‡å­—ã‚’éžæ­£è¦è¡¨ç¾ã¨ã—ã¦æ‰±ã† \[ã€\?ã€\. [aaã€a?ã€a.

メタキャラクタ

è¡¨ç¾ æ©Ÿèƒ½ 例
\w 英字 a~zã€A~Zã€_ã€1~9
\W 英字以外
\s 空白文字 åŠè§’スペースã€ã‚¿ãƒ–ã€æ”¹è¡Œã€ã‚­ãƒ£ãƒªãƒƒã‚¸ãƒªã‚¿ãƒ¼ãƒ³
\S 空白文字以外
\d åŠè§’æ•°å­— 0~9
\D åŠè§’数字以外
\b å˜èªžã®å¢ƒç•Œ

ä»»æ„ã®ä¸€æ–‡å­—

[検索語]
検索語ã®ä¸­ã®ä¸€æ–‡å­— ã‚’å«ã‚€ã‹ï¼Ÿ

string[] strCheck = {
  @"C#", ⇒マッãƒï¼
  @"c#", ⇒マッãƒï¼
  @"C", ⇒マッãƒï¼
  @"c", ⇒マッãƒï¼
  @"I Love C#", ⇒マッãƒï¼
  @"VB.NET",
  @"Perl",
  @"abcde", ⇒マッãƒï¼
  @"i love c#", ⇒マッãƒï¼
  };

// elm ã¯ã€Œcã€ã‹ã€ŒCã€ã‚’å«ã‚€ã‹ï¼Ÿ
Regex myReg = new Regex(pattern: @"[cC]");

foreach (string elm in strCheck)
{
  if (myReg.IsMatch(elm))
  {
    Console.WriteLine("マッãƒï¼");
  }
}

import re

pattern = re.compile(r'[pP]')
mo = pattern.findall('phpPHPpythonPYTHONjavaJAVA')
mo # ['p', 'p', 'P', 'P', 'p', 'P']
mo[0] # p(å°æ–‡å­—)
mo[1] # p(å°æ–‡å­—)
mo[2] # P(大文字)
mo[3] # P(大文字)

連続を定義ã™ã‚‹å ´åˆ
[a-zA-Z0-9]

記å·ã‚’定義ã™ã‚‹å ´åˆ
[.]
â†“ã®æ§˜ã«ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ä¸è¦
[\.]

補集åˆ
定義ã—ãŸæ–‡å­—列ã§ãªã„文字列を検索
pattern = re.compile(r'[^pP]')
mo = pattern.findall('phpPHPpythonPYTHONjavaJAVA')
mo # ['h', 'H', 'y', 't', 'h', 'o', ç•¥]
mo[0] # h
mo[1] # H

文字列 =~ /[検索語]/
文字列 㯠検索語ã®ä¸­ã®ä¸€æ–‡å­— ã‚’å«ã‚€ã‹ï¼Ÿ

fnMatchCheck("I Love Perl");
→マッãƒï¼
fnMatchCheck("I love perl");
→マッãƒï¼

sub fnMatchCheck
{
  my $target = shift;
  # $target 㯠p or P ã‚’å«ã‚€ã‹ï¼Ÿ
  if ($target =~ /[pP]/)
  {
    print "マッãƒï¼","\n";
  }
}

ä»»æ„ã®ä¸€æ–‡å­—(連続)
[ag]
⇒[abcdefg]

fnMatchCheck("c;);
→マッãƒï¼

sub fnMatchCheck
{
  my $target = shift;
  # $target 㯠abcdefg・・・vwxyz ã®ä¸­ã®ä¸€æ–‡å­—ã‚’å«ã‚€ã‹ï¼Ÿ
  if ($target =~ /[a-z]/)
  {
    print "マッãƒï¼","\n";
  }
}

ä»»æ„ã®ä¸€æ–‡å­—ã®å¦å®š
文字列 =~ /[^検索語]/
文字列 㯠検索語ã®ä¸­ã®ä¸€æ–‡å­— ã‚’å«ã¾ãªã„ã‹ï¼Ÿ

fnMatchCheck("hijklmn");
→マッãƒï¼

sub fnMatchCheck
{
  my $target = shift;

  # $target 㯠abcdefg ã®ä¸­ã®ä¸€æ–‡å­—ã‚’å«ã¾ãªã„ã‹ï¼Ÿ
  if ($target =~ /[^a-g]/)
  {
    print "マッãƒï¼","\n";
  }
}

ワイルドカード(一文字)

.
何ã‹ä¸€æ–‡å­— ã‚’å«ã‚€ã‹ï¼Ÿ

string[] strCheck = {
  @"get", ⇒マッãƒï¼
  @"gt",
  @"g",
  @"t",
  @"got", ⇒マッãƒï¼
  @"ghost",
  @"I get pass" ⇒マッãƒï¼
  };

// elm 㯠先頭「gã€ã€é–“ã«ä½•ã‹ä¸€æ–‡å­—ã€æœ«å°¾ã€Œtã€ã®æ–‡å­—ã‚’å«ã‚€ã‹ï¼Ÿ
Regex myReg = new Regex(pattern: @"g.t");

foreach (string elm in strCheck)
{
  if (myReg.IsMatch(elm))
  {
    Console.WriteLine("マッãƒï¼");
  }
}

import re

pattern = re.compile(r'.at')
mo = pattern.findall('The cat in the hat sat on the flat mat.')
mo # ['cat', 'hat', 'sat', 'lat', 'mat']
mo[0] # cat

pattern = re.compile(r'Language: (.*) Frame Work: (.*)')
mo = pattern.search('Language: php Frame Work: CakePHP3, Laravel')
mo.group() # Language: php Frame Work: CakePHP3, Laravel
mo.group(1) # php
mo.group(2) # CakePHP3, Laravel

最短探索
pattern = re.compile(r'<.*?>')
mo = pattern.search('Language: <php> Frame Work: <CakePHP3, Laravel>')
mo.group() # <php>

最長探索
pattern = re.compile(r'<.*>')
mo = pattern.search('Language: <php> Frame Work: <CakePHP3, Laravel>')
mo.group() # <php> Frame Work: <CakePHP3, Laravel>

ワイルドカード「.ã€æŽ¢ç´¢ã«æ”¹è¡Œã‚’å«ã‚ã‚‹
pattern = re.compile(r'文字列', re.DOTALL)

文字列 =~ / ~.~ /
文字列 㯠~何ã‹ä¸€æ–‡å­—~ ã‚’å«ã‚€ã‹ï¼Ÿ

fnMatchCheck("get");
→マッãƒï¼
fnMatchCheck("ghost");
→マッãƒã—ãªã„
fnMatchCheck("I’ve got a pass");
→マッãƒï¼

sub fnMatchCheck
{
  my $target = shift;
  # $target 㯠g(何ã‹ä¸€æ–‡å­—)t ã‚’å«ã‚€ã‹ï¼Ÿ
  if ($target =~ /g.t/)
  {
    print "マッãƒï¼","\n";
  }
}

釿Œ‡å®šå­

「?ã€(0個or1個)

string[] strCheck = {
  @"get", ⇒マッãƒï¼
  @"gt", ⇒マッãƒï¼
  @"g",
  @"t",
  @"got", ⇒マッãƒï¼
  @"ghost",
  @"I get pass" ⇒マッãƒï¼
  @"gto = great teacher onizuka"; ⇒マッãƒï¼
  };

// elm 㯠先頭「gã€ã€é–“ã«ä½•ã‹ï¼æ–‡å­—orä¸€æ–‡å­—ã€æœ«å°¾ã€Œtã€ã®æ–‡å­—ã‚’å«ã‚€ã‹ï¼Ÿ
Regex myReg = new Regex(pattern: @"g.?t");

foreach (string elm in strCheck)
{
  if (myReg.IsMatch(elm))
  {
    Console.WriteLine("マッãƒï¼");
  }
}

import re

pattern = re.compile(r'Bat(wo)?man')
mo = pattern.search('The Adventures of Batman')
print(mo.group()) # Batman

mo = pattern.search('The Adventures of Batwoman')
print(mo.group()) # Batwoman

pattern = re.compile(r'(\d{3}-)?\d{4}-\d{4}')
mo = pattern.search('電話番å·ã¯050-3695-589244ã§ã™ã€‚')
mo.group() # 050-3695-5892

mo = pattern.search('電話番å·ã¯3695-589244ã§ã™ã€‚')
mo.group() # 3695-5892

pattern = re.compile(r'aa\d?aa')
mo = pattern.search('__aa555aa__')
mo # None

pattern = re.compile(r'aa\d?aa')
mo = pattern.search('__aa5aa__')
mo.group() # aa5aa

pattern = re.compile(r'aa\d?aa')
mo = pattern.search('__aaaa__')
mo.group() # aaaa

pattern = re.compile(r'aa\d?aa')
mo = pattern.search('__aaa__')
mo # None

文字列 =~ / ~? /
文字列 㯠~を0文字ã‹1文字 ã‚’å«ã‚€ã‹ï¼Ÿ

例:ab?
⇒「a〠ã¾ãŸã¯ 「abã€ã«ãƒžãƒƒãƒ
例:a.?
⇒「a〠ã¾ãŸã¯ 「adã€ã€Œabã€â€¦ã€Œazã€ã‚„ã€ã€Œa0ã€â€¦ã€Œa9ã€ã«ãƒžãƒƒãƒ

fnMatchCheck("gt");
→マッãƒï¼
fnMatchCheck("get");
→マッãƒï¼
fnMatchCheck("ghost");
→マッãƒã—ãªã„

sub fnMatchCheck
{
  my $target = shift;

  if ($target =~ /g.?t/)
  {
   # $target 㯠g(何ã‹ã®æ–‡å­—0文字ã‹1文字)t ã‚’å«ã‚€ã‹ï¼Ÿ
    print "マッãƒï¼","\n";
  }
}

「+ã€(1個以上)

string[] strCheck = {
  @"get", ⇒マッãƒï¼
  @"gt",
  @"g",
  @"t",
  @"got", ⇒マッãƒï¼
  @"ghost", ⇒マッãƒï¼
  @"I get pass" ⇒マッãƒï¼
  @"gto = great teacher onizuka";
  };

// elm 㯠先頭「gã€ã€é–“ã«ä½•ã‹ä¸€æ–‡å­—ä»¥ä¸Šã€æœ«å°¾ã€Œtã€ã®æ–‡å­—ã‚’å«ã‚€ã‹ï¼Ÿ
Regex myReg = new Regex(pattern: @"g.+t");

foreach (string elm in strCheck)
{
  if (myReg.IsMatch(elm))
  {
    Console.WriteLine("マッãƒï¼");
  }
}

import re

pattern = re.compile(r'Bat(wo)+man')

mo = pattern.search('The Adventures of Batman')
mo # None

mo = pattern.search('The Adventures of Batwoman')
mo.group() # Batwoman

mo = pattern.search('The Adventures of Batwowowoman')
mo.group() # Batwowowoman

文字列 =~ / ~+ /
文字列 㯠~を1個以上 ã‚’å«ã‚€ã‹ï¼Ÿ

例:ab+
⇒「abã€ã€Œabbã€ã€Œab0ã€â€¦ã«ãƒžãƒƒãƒ
例:a.+
⇒「aaã€ã€Œabã€ã€Œabcã€â€¦ã«ãƒžãƒƒãƒ

fnMatchCheck("gt");
→マッãƒã—ãªã„
fnMatchCheck("get");
→マッãƒï¼
fnMatchCheck("ghost");
→マッãƒï¼

sub fnMatchCheck
{
  my $target = shift;

  if ($target =~ /g.+t/)
  {
   # $target 㯠g(何ã‹ã®æ–‡å­—1個以上)t ã‚’å«ã‚€ã‹ï¼Ÿ
    print "マッãƒï¼","\n";
  }
}

「*ã€(0個以上)

string[] strCheck = {
  @"get", ⇒マッãƒï¼
  @"gt", ⇒マッãƒï¼
  @"g",
  @"t",
  @"got", ⇒マッãƒï¼
  @"ghost", ⇒マッãƒï¼
  @"I get pass" ⇒マッãƒï¼
  @"gto = great teacher onizuka"; ⇒マッãƒï¼
  };

// elm 㯠先頭「gã€ã€é–“ã«ä½•ã‹ï¼æ–‡å­—ä»¥ä¸Šã€æœ«å°¾ã€Œtã€ã®æ–‡å­—ã‚’å«ã‚€ã‹ï¼Ÿ
Regex myReg = new Regex(pattern: @"g.*t");

foreach (string elm in strCheck)
{
  if (myReg.IsMatch(elm))
  {
    Console.WriteLine("マッãƒï¼");
  }
}

import re

pattern = re.compile(r'Bat(wo)*man')

mo = pattern.search('The Adventures of Batman')
mo.group() # Batman

mo = pattern.search('The Adventures of Batwoman')
mo.group() # Batwoman

mo = pattern.search('The Adventures of Batwowowoman')
mo.group() # Batwowowoman

文字列 =~ / ~* /
文字列 㯠~を0文字以上 ã‚’å«ã‚€ã‹ï¼Ÿ

例:ab*
⇒「aã€ã€Œabã€ã€Œabbã€ã€Œab0ã€â€¦ã«ãƒžãƒƒãƒ
例:a.*
⇒「aã€ã€Œaaã€ã€Œabã€ã€Œabcã€â€¦ã«ãƒžãƒƒãƒ

fnMatchCheck("gt");
→マッãƒï¼
fnMatchCheck("get");
→マッãƒï¼
fnMatchCheck("ghost");
→マッãƒï¼

sub fnMatchCheck
{
  my $target = shift;

  if ($target =~ /g.*t/)
  {
   # $target 㯠g(何ã‹ã®æ–‡å­—0個以上)t ã‚’å«ã‚€ã‹ï¼Ÿ
    print "マッãƒï¼","\n";
  }
}

「{n}ã€(n個連続)
「{n,}ã€(n個以上連続)
「{n,m}ã€(n個以上m個以下連続)

string[] strCheck1 = {
  @"gt",
  @"get",
  @"geet",
  @"geeet" ⇒マッãƒï¼,
  @"geeeet",
  @"g",
  @"t",
  @"ghost" ⇒マッãƒï¼,
  @"I see ghost." ⇒マッãƒï¼;
  };

// elm 㯠先頭「gã€ã€é–“ã«ä½•ã‹ä¸‰æ–‡å­—ã€æœ«å°¾ã€Œtã€ã®æ–‡å­—ã‚’å«ã‚€ã‹ï¼Ÿ
Regex myReg1 = new Regex(pattern: @"g.{3}t");

foreach (string elm in strCheck1)
{
  if (myReg1.IsMatch(elm))
  {
    Console.WriteLine("マッãƒï¼");
  }
}

string[] strCheck2 = {
  @"gt",
  @"get", ⇒マッãƒï¼
  @"geet", ⇒マッãƒï¼
  @"geeet", ⇒マッãƒï¼
  @"geeeet",
  @"g",
  @"t",
  @"ghost" ⇒マッãƒï¼,
  @"I see ghost." ⇒マッãƒï¼
  };

// elm 㯠先頭「gã€ã€é–“ã«ä½•ã‹ï¼‘ï½žï¼“æ–‡å­—ã€æœ«å°¾ã€Œtã€ã®æ–‡å­—ã‚’å«ã‚€ã‹ï¼Ÿ
Regex myReg2 = new Regex(pattern: @"g.{1,3}t");

foreach (string elm in strCheck2)
{
  if (myReg2.IsMatch(elm))
  {
    Console.WriteLine("マッãƒï¼");
  }
}

string[] strCheck3 = {
  @"gt",
  @"get",
  @"geet",
  @"geeet", ⇒マッãƒï¼
  @"geeeet", ⇒マッãƒï¼
  @"g",
  @"t",
  @"ghost" ⇒マッãƒï¼,
  @"I see ghost." ⇒マッãƒï¼;
  };

// elm 㯠先頭「gã€ã€é–“ã«ä½•ã‹ä¸‰æ–‡å­—ä»¥ä¸Šã€æœ«å°¾ã€Œtã€ã®æ–‡å­—ã‚’å«ã‚€ã‹ï¼Ÿ
Regex myReg3 = new Regex(pattern: @"g.{3,}t");

foreach (string elm in strCheck3)
{
  if (myReg3.IsMatch(elm))
  {
    Console.WriteLine("マッãƒï¼");
  }
}

import re

phone_num_pattern = re.compile(r'\d\d\d-\d\d\d\d-\d\d\d\d')
↑ã¨åŒã˜
phone_num_pattern = re.compile(r'\d{3}-\d{4}-\d{4}')
mo = phone_num_pattern.search('aaaaaaa050-3695-589244444ddddddddd')
mo.group() 050-3695-5892

文字列 =~ / ~{n} /
文字列 㯠~をn個連続 ã‚’å«ã‚€ã‹ï¼Ÿ

例:ge{2}t
⇒「geetã€ã«ãƒžãƒƒãƒã€‚get:×ã€gt:×

fnMatchCheck("get");
→マッãƒã—ãªã„
fnMatchCheck("geet");
→マッãƒï¼
fnMatchCheck("geeet");
→マッãƒã—ãªã„

sub fnMatchCheck
{
  my $target = shift;

  if ($target =~ /ge{2}t/)
  {
    print "マッãƒï¼","\n";
  }
}

最長/最短一致「正è¦è¡¨ç¾ã€?

import re

最長マッãƒ/貪欲マッãƒ
pattern = re.compile(r'(php){3,5}')
mo = pattern.search('phpphpphpphp')
mo.group() # phpphpphpphp
æœ€ã‚‚é•·ã„æ–‡å­—列を検索

最短マッãƒ/éžè²ªæ¬²ãƒžãƒƒãƒ
pattern = re.compile(r'(php){3,5}?')
mo = pattern.search('phpphpphpphp')
mo.group() # phpphpphp
æœ€ã‚‚çŸ­ã„æ–‡å­—列を検索

ä½ç½®æŒ‡å®šå­

「^〠先頭

例: "^\d"
"555" â—‹
"5aa" â—‹
"a55" ×
import re

phone_num_pattern = re.compile(r'^\d{3}-\d{4}-\d{4}')
mo = phone_num_pattern.search('aaaaaaa050-3695-589244444ddddddddd')
mo None

phone_num_pattern = re.compile(r'^\d{3}-\d{4}-\d{4}')
mo = phone_num_pattern.search('050-3695-589244444ddddddddd')
mo.group() 050-3695-5892

phone_num_pattern = re.compile(r'^\d{3}-\d{4}-\d{4}$')
mo = phone_num_pattern.search('050-3695-5892')
mo.group() #050-3695-5892

「$〠末尾

ãŸã ã—ã€æ–‡å­—åˆ—ã®æœ«å°¾ãŒ \n ã®æ™‚ã¯ã€ãã®å‰ã¨ä¸€è‡´ã€‚
(末尾㌠\n ã§ã‚‚末尾ã§ä¸€è‡´ã•ã›ã‚‹ã«ã¯ã€\z を使ã†ã€‚)

例: "\d$"
"555" â—‹
"aa5" â—‹
"55a" ×
import re

phone_num_pattern = re.compile(r'\d{3}-\d{4}-\d{4}$')
mo = phone_num_pattern.search('aaaaaaa050-3695-589244444ddddddddd')
mo None

phone_num_pattern = re.compile(r'\d{3}-\d{4}-\d{4}$')
mo = phone_num_pattern.search('aaaaaaa050-3695-5892')
mo.group() 050-3695-5892

phone_num_pattern = re.compile(r'^\d{3}-\d{4}-\d{4}$')
mo = phone_num_pattern.search('050-3695-5892')
mo.group() #050-3695-5892

代替構æˆä½“「|ã€

import re

pattern = re.compile(r'php|python')
mo = pattern.search('ç§ã¯pythonã¨phpãŒå¾—æ„ã§ã™')
mo.group() # python

mo = pattern.search('ç§ã¯phpã¨pythonãŒå¾—æ„ã§ã™')
mo.group() # php

mo = pattern.findall('ç§ã¯pythonã¨phpãŒå¾—æ„ã§ã™')
mo # ['python', 'php']
mo[0] # python
mo[1] # python

グループ化構æˆä½“「()ã€

import re

pattern = re.compile(r'(\d{3})-(\d{4})-(\d{4})')
mo = pattern.search('ç§ã®é›»è©±ç•ªå·ã¯050-3695-5892ã§ã™')
mo.group() # 050-3695-5892
mo.group(0) # 050-3695-5892
mo.group(1) # 050
mo.group(2) # 3695
mo.group(3) # 5892

mo.groups() # ('050', '3695', '5892')

ç½®æ›

import re

pattern = re.compile(r'Language: \w+')
mo = pattern.sub(ç½®æ›ã™ã‚‹æ–‡å­—, ç½®æ›ã™ã‚‹å‰ã®æ–‡å­—列)
mo = pattern.sub('php', 'Language: XXX / Frame Work: CakePHP3')
mo
php / Frame Work: CakePHP3

pattern = re.compile(r'Agent \w+')
mo = pattern.sub('Agent *****', 'Agent Alice told Agent Carol that Agent Eve knew Agent Bob.')
mo
Agent ***** told Agent ***** that Agent ***** knew Agent *****.

pattern = re.compile(r'Agent (\w)\w*')
グループ1ã«ãƒžãƒƒãƒã—ãŸæ–‡å­—列ã«å¯¾ã—ã¦ã€\1ã‚’ç½®æ›ã™ã‚‹
ã“ã®å ´åˆã¯(\w) ï¼Agent ã®å¾Œã®æœ€åˆã®1文字ã§ç½®æ›
mo = pattern.sub(r'\1****', 'Agent Alice told Agent Carol that Agent Eve knew Agent Bob.')
mo
A**** told C**** that E**** knew B****.

pattern = re.compile(r'Agent (\w)\w*')
mo = pattern.sub('*****', 'Agent Alice told Agent Carol that Agent Eve knew Agent Bob.')
mo
***** told ***** that ***** knew *****.

変数 =~ s/ç½®æ›å¯¾è±¡/ç½®æ›å¾Œ/;

my $s = "i love perl";
$s =~ s/i/I/;
⇒$s : I love perl

my $s = "I love perl";
$s =~ s/love/LOVE/;
$s =~ s/perl/PERL/;
⇒$s : I LOVE PERL

マッãƒã—ãŸå€¤ã®å–å¾—

if (文字列 =~ /(検索語)/)
{
  print "$1","\n";
  ⇒ 検索語
  # マッãƒã—ãŸå ´åˆã€æ¤œç´¢èªžãŒ$1ã«å…¥ã‚‹ã€‚
}

my $words_ref = [
  'papix loves meat!',
  'boolfool loves sushi!',
];

check($words_ref);

sub check
{
 my $str = shift;

 for my $elm (@$str)
 {
  if ($elm =~ /(.+) loves (.+)!/)
  {
   print "$1 => $2","\n";
   ⇒ papix => meat
   ⇒ boolfool => sushi
  }
 }
}

SQLã§ã®åˆ©ç”¨

「SQL DML:データ型/WHEREå¥ã«ãŠã‘る文字指定ã€å‚ç…§

Follow me!