LoginSignup
133
130

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-01-15

位置

  • ^
    先頭

  • $
    行末

量指定子

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

参考

133
130
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
133
130