正規表現レファレンス

はじめ

正規表現(Regular Expression)とは特定の規則を持っている文字列の集合を表現するのに使われている形式言語です。これをうまく使いこなせるなら、コードのラインが確実に減るに違いありません。これから、正規表現の使用例を具体的に調べて、活用方案の例を見てみましょう。

使用例

  • PHPのpreg_match関数
    • $subject = "abcdef";
      $pattern = '/^def/';
      preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3);
      print_r($matches);
      
  • C#のRegExクラス
    • class TestRegularExpressionValidation
      {
          static void Main()
          {
              string[] numbers = 
              {
                  "123-555-0190", 
                  "444-234-22450", 
                  "690-555-0178", 
                  "146-893-232",
                  "146-555-0122",
                  "4007-555-0111", 
                  "407-555-0111", 
                  "407-2-5555", 
              };
      
              string sPattern = "^\\d{3}-\\d{3}-\\d{4}$";
      
              foreach (string s in numbers)
              {
                  System.Console.Write("{0,14}", s);
      
                  if (System.Text.RegularExpressions.Regex.IsMatch(s, sPattern))
                  {
                      System.Console.WriteLine(" - valid");
                  }
                  else
                  {
                      System.Console.WriteLine(" - invalid");
                  }
              }
      
              // Keep the console window open in debug mode.
              System.Console.WriteLine("Press any key to exit.");
              System.Console.ReadKey();
          }
      }
      /* Output:
            123-555-0190 - valid
           444-234-22450 - invalid
            690-555-0178 - valid
             146-893-232 - invalid
            146-555-0122 - valid
           4007-555-0111 - invalid
            407-555-0111 - valid
              407-2-5555 - invalid
      */
  • JavaのRegExクラス
    • import java.util.regex.Matcher;
      import java.util.regex.Pattern;
      
      public class RegexMatches {
      
         public static void main( String args[] ) {
            // String to be scanned to find the pattern.
            String line = "This order was placed for QT3000! OK?";
            String pattern = "(.*)(\\d+)(.*)";
      
            // Create a Pattern object
            Pattern r = Pattern.compile(pattern);
      
            // Now create matcher object.
            Matcher m = r.matcher(line);
            if (m.find( )) {
               System.out.println("Found value: " + m.group(0) );
               System.out.println("Found value: " + m.group(1) );
               System.out.println("Found value: " + m.group(2) );
            }else {
               System.out.println("NO MATCH");
            }
         }
      }
  • javascriptのリテラルまたは、RegExpクラス
    • var myRe = /d(b+)d/g;
      var myArray = myRe.exec("cdbbdbsbz");
  • URL Rewrite Rule
    • rewrite ^/blog/sitemap(-+([a-zA-Z0-9_-]+))?\.xml$ "/blog/sitemap$2.xml" last;
      rewrite ^/blog/sitemap(-+([a-zA-Z0-9_-]+))?\.xml$ "/blog/index.php?xml_sitemap=params=$2" last;
      rewrite ^/blog/sitemap(-+([a-zA-Z0-9_-]+))?\.xml\.gz$ "/blog/index.php?xml_sitemap=params=$2;zip=true" last;
      rewrite ^/blog/sitemap(-+([a-zA-Z0-9_-]+))?\.html$ "/blog/index.php?xml_sitemap=params=$2;html=true" last;
      rewrite ^/blog/sitemap(-+([a-zA-Z0-9_-]+))?\.html.gz$ "/blog/index.php?xml_sitemap=params=$2;html=true;zip=true" last;

レファレンス

文字列クラス
[文字列] 文字列から見つかった一字が選択されます. (한 글자) 使用例
[^文字列] 文字列から見つかっていない一字が選択されます。 使用例
[最低最高] 最低から最高までのすべての範囲の文字が該当します。 使用例
. ワイルドカード。\nを除くすべての文字が選択されます。 使用例
\p{カテゴリー} ユニコード文字からのカテゴリーが選択されます。使えるカテゴリーについては、ユニコード一般セクションをご覧ください。 使用例
\P{카테고리} ユニコードの該当カテゴリーを除くすべての文字が選択されます。使えるカテゴリーについては、ユニコード一般セクションをご覧ください。 使用例
\w すべての文字、10進数の数字、アンダースコアの項目が該当します。 使用例
\W 文字、10進数の数字、アンダースコアを除く項目が該当します。 使用例
\s すべての空白文字です。 使用例
\S すべての空白文字を除いたものです。 使用例
\d 10進数の数字です。 使用例
\D 10進数の数字を除く文字です。 使用例
文字エスケープ
\r キャリッジリターンです。(Char 10, ラインフィード) 使用例
\n 改行です。 使用例
\t タップです。
[\b] バックスペースです。ブラケットは必須です。
\f フォームフィード文字です。
\e エスケープです。
\v 縦タップです。
\a ベル文字です。
\8進数 8進数の文字番号です。 使用例
\x16進数 二字のヘックス文字です。 使用例
\u16進数 四字のヘックス文字です。 使用例
\c文字 文字で決められているASCIIコントロール文字を探します。
アンカー
^ インプットの始まりです。複数の行では、複数あります。 使用例
$ インプットの末端、また\nの直前です。複数の行では、複数あります。 使用例
\A ^と同じくインプットの末端で、複数の行があっても、一度しかありません。 使用例
\Z $と同じくインプットの末端で、複数の行があっても、一度しかありません。 使用例
\z 例外なく、インプットの末端です。空行でも選択されます。 使用例
\G 前のパターンをまた探します。検索の続きに使われます。 使用例
\b 単語の切りです。特に、\wと\Wの間です。 使用例
\B 単語の切りではないところです。特に、\wと\Wではないところです。 使用例
グループ化構成
(サブパターン) サブパターンを探して、名無しのグループにします。 使用例
(?<名前>サブパターン) サブパターン探して、名前で定義されたのにグループ化します。 使用例
(?<이전의 이름>サブパターン) グループの定義を組み合わせます。括弧やHTMLタグに囲まれた構造を探せるようにします。前に名前が付けられたグループは前の名前のままです。サブパターンに名前を付けて、記録もできるし、名前なしで名無しグループにもできます。詳しい情報はチュートリアルがあります。 使用例
(?:サブパターン) 記録しないグループです。グループに記録せず、サブパターンを括弧で包めます。 使用例
(?enableddisabled:サブパターン) サブパターンが他のパターンと別のオプションを持つようにします。内部オプション文字はenabledあるいはdisabledで特定のオプションを調整します。

하위패턴이 나머지 패턴과 다른 옵션을 갖도록 합니다. 내부 옵션 문자는 enabled 또는 disabled로 특정 옵션을 조정합니다. imnsx-imnsx로 나타납니다. (켜진 옵션-꺼진 옵션)

  • IgnoreCase: i, 대소문자 무관
  • Multiline: m, 여러줄. ^ $의 동작 변화
  • IgnorePatternWhitespace: n, 이스케이프 처리되지 않은 공백을 패턴에서 제거하고 #로 표시된 주석을 활성화합니다. 그러나 이 값은 개별 정규 표현식 언어 요소의 시작 부분을 나타내는 문자 클래스, 숫자 한정 기호 또는 토큰의 공백에 영향을주지 않거나 제거하지 않습니다.
  • Singleline: s, 단일줄. .이 \n을 포함하게 됨
  • ExplicitCapture: x,(?:패턴) 없이도 무명의 패턴 그룹을 기록하지 않음
使用例
(?=サブパターン) 공백 없이 앞으로 검색합니다. 하위패턴이 우측으로 일치할 때 계속합니다. 使用例
(?!サブパターン) 공백 없이 뒤로 검색합니다. 하위패턴이 왼쪽으로 일치할 때 계속합니다. 使用例
(?<=サブパターン)  

Zero-width positive lookbehind assertion. Continues matching only if subpattern matches on the left.

使用例
(?<!サブパターン) Zero-width negative lookbehind assertion. Continues matching only if subpattern does not match on the left. 使用例
(?>サブパターン) Prevents backtracking over subpattern, which can improve performance.
数量
* 이전 요소가 0회 이상 나타난 경우 찾습니다. 使用例
+ 이전 요소가 1회 이상 나타난 경우 찾습니다. 使用例
? 이전 요소가 0회 또는 1회 나타난 경우 찾습니다. 使用例
{n} 이전 요소가 정확히 n회 나타난 경우 찾습니다. 使用例
{n,} 이전 요소가 최소 n회 이상 나타난 경우 찾습니다. 使用例
{n,m} 이전 요소가 n회 이상 m회 이하 나타난 경우 찾습니다. 使用例
*? 이전 요소가 0회 이상 나타난 것 중 패턴의 최소한의 경우만 찾습니다. 使用例
+? 이전 요소가 1회 이상 나타난 것 중 패턴의 최소한의 경우만 찾습니다. 使用例
?? 이전 요소가 0회 또는 1회 나타난 것 중 패턴의 최소한의 경우만 찾습니다. 使用例
{n,}? 이전 요소가 최소 n회 이상 나타난 것 중 패턴의 최소한의 경우만 찾습니다. 使用例
{n,m}? 이전 요소가 n회 이상 m회 이하 나타난 것 중 패턴의 최소한의 경우만 찾습니다. 使用例
逆レファレンス
\数字 이전에 숫자로 기록된 그룹을 찾습니다. 使用例
\k<名前> 이전에 이름으로 지정된 그룹을 찾습니다. 使用例
대체 구조
| ‘OR'(또는)의 논리 함수입니다. 이것으로 나뉘어진 모든 항목을 찾습니다. 使用例
(?(サブパターン)yes|no) 하위패턴을 공백 없이 검사하여 다르게 처리합니다. 참인 경우, yes의 패턴으로 일치시키고, 거짓인 경우 no의 패턴으로 일치시킵니다. no 패턴은 선택 사항입니다. 使用例
(?(그룹)yes|no) 성공적으로 찾은, 이전에 기록된 그룹인지 이름이나 숫자로 확인하여 다르게 처리합니다. 참인 경우 yes의 패턴으로 일치시키고, 아닌 경우 no의 패턴으로 시도합니다. no 패턴은 선택 사항입니다. 使用例
切り替え
$number 숫자로 찾은 그룹 값을 나타냅니다.
${name} 이름으로 찾은 그룹 값을 나타냅니다.
$$ $ 문자를 나타냅니다.
$& 모든 일치한 결과를 나타냅니다.
$` 일치 영역 전까지의 모든 입력값을 나타냅니다.
$’ 일치한 값 뒤로 모든 입력값입니다.
$+ 기록된 마지막 그룹을 나타냅니다.
$_ 모든 입력값을 나타냅니다.
その他
(?enableddisabled) 패턴 중간에 옵션을 변경합니다. 자세한 값은 위 (?enabled-disabled:하위패턴)을 참조하세요.
(?# comment) 내용 속 주석이며, 패턴으로 처리되지 않습니다. 使用例
# comment 주석 줄 끝으로, 패턴 처리되지 않습니다. 공백 무시 옵션이 켜있어야 사용할 수 있습니다. 使用例

結論

どうしてなのか、このブログのリダイレクトの使われています。

馬鹿なグーグルに404ばっかり積み重ねているのはあまりにも良くないからですね。301リダイレクトでないと、ダメらしいです。

RegExrで練習もできるそうです。

コメントを残す

メールアドレスが公開されることはありません。