Help us understand the problem. What is going on with this article?

iOSエンジニアの正規表現入門

More than 3 years have passed since last update.

位置

  • ^
    先頭

  • $
    行末

量指定子

  • *
    直前のパターンに0回以上一致。img[0-9]*の場合、img,img8,img123などに一致

  • +
    直前のパターンに1回以上一致。img[0-9]+の場合、 img8,img123などに一致

  • ?
    直前のパターンに0回か1回一致。img[0-9]?の場合、 img,img1が一致し、img123には一致しない

  • {n}
    直前に指定された文字のn回の繰り返し。e{2}Greenに一致し、likeには一致しない

  • {n,}
    直前に指定された文字のn回以上の繰り返し。e{2,}Green, Greeen, Greeeenに一致。e{1,}e+と同義

  • {,n}
    直前に指定された文字のn回以下の繰り返し。e{,3}Greeen,Green,Grenに一致

  • {n,m}
    直前に指定された文字のn回以上m回以下の繰り返し。e{1,3}Greeeeeeeeeeeeenの最初の3つの一致。e{0,1}e?と同義

文字

  • a
    文字a

  • .
    任意の1文字(改行は含まない)

  • \d
    数字1文字。[0-9]と同義

  • \D
    数字1文字以外。[^0-9]と同義

  • \w
    英数字1文字。[a-zA-Z0-9]と同義

  • \W
    英数字1文字以外。[^a-zA-Z0-9]と同義

  • \s
    空白文字1文字。[\t\n\r\f\v]と同義

  • \S
    空白文字 1 文字以外。[^\t\n\r\f\v]と同義

  • \t
    タブ1文字

  • \n
    改行1文字。

エスケープ

特殊文字 エスケープ
\ \\
* \*
+ \+
. \.
? \?
{ } \{\}
( ) \(\)
[ ] \[\]
$ $
- \-
| \ |
/ \/

文字クラス

  • [abc]
    abcいずれか1文字

  • [^abc]
    abc以外の文字

  • [a-z]
    aからzまでの子文字アルファベットのいずれか1文字。(ハイフンなどを含めたい場合[-a-z])

  • [A-Z]
    AからZまでの大文字アルファベットのいずれか1文字

  • [0-9]
    0-9の数字のいずれか1文字

  • [A-Za-z0-9]
    結合したパターン。A-Zまたはa-zまたは0-9の英数字

  • [a-z&&[^bc]]
    bcを除くa-z[ad-z]と同義

  • (abc)
    カッコ内の文字列をひとつのグループとして管理する

  • (abc|def)
    abc, defの文字列のいずれか

  • (?:abc)肯定先読み
    abcに一致する文字列が始まる位置にある検索文字列と一致する。一致した文字列はキャプチャはされない。industry|industriesと指定する代わりに、industr(?:y|ies)と指定することができる。Windows(?=95|98|NT|2000)は、Windows 2000Windows に一致し、"Windows 3.1" の "Windows"には一致しない。

  • (?!abc)否定先読み
    abcに一致しない文字列が始まる位置にある検索文字列と一致する。一致した文字列はキャプチャはされない。Windows (?!95|98|NT|2000)は、Windows 3.1Windows に一致し、Windows 2000Windowsには一致しない

  • (?<=abc)肯定戻り読み
    abcに一致する文字列が始まる位置にある検索文字列と一致する。一致した文字列はキャプチャはされない。(?<=Ubuntu|Debian GNU) Linux は、Ubuntu LinuxLinux に一致し、Vine LinuxLinuxには一致しない。

  • (?<!abc)否定戻り読み
    abcに一致しない文字列が始まる位置にある検索文字列と一致する。一致した文字列はキャプチャはされない。(?<!Ubuntu|Debian GNU) Linux は、Vine LinuxLinuxに一致し、Ubuntu LinuxLinuxには一致しない。

サンプルコード

extension String {
    func isNumber() -> Bool {
        let pattern = "^[\\d]+$"
        guard let regex = try? NSRegularExpression(pattern: pattern) else { return false }
        let matches = regex.matches(in: self, range: NSRange(location: 0, length: length))
        return matches.count > 0
    }
}

let numberString = "0123"
print(numberString.isNumber()) // true

let alphabet = "abcd"
print(alphabet.isNumber()) // false

参考

shoheiyokoyama
【横山 祥平 / @shoheiyokoyama 】 CyberAgent, Inc / AbemaTV / CATS / iOS Engineer Medium: https://medium.com/@shoheiyokoyama
https://github.com/shoheiyokoyama
cyberagent
サイバーエージェントは「21世紀を代表する会社を創る」をビジョンに掲げ、インターネットテレビ局「AbemaTV」の運営や国内トップシェアを誇るインターネット広告事業を展開しています。インターネット産業の変化に合わせ新規事業を生み出しながら事業拡大を続けています。
http://www.cyberagent.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away