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

位置

  • ^
    先頭

  • $
    行末

量指定子

  • *
    直前のパターンに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

参考


『 Swift 』Article List