Regular Expressions 101

Save & Manage Regex

  • Current Version: 1
  • Save & Share
  • Community Library

Flavor

  • PCRE2 (PHP)
  • ECMAScript (JavaScript)
  • Python
  • Golang
  • Java
  • .NET 7.0 (C#)
  • Rust
  • PCRE (Legacy)
  • Regex Flavor Guide

Function

  • Match
  • Substitution
  • List
  • Unit Tests
Sponsors
An explanation of your regex will be automatically generated as you type.
Detailed match information will be displayed here automatically.
  • All Tokens
  • Common Tokens
  • General Tokens
  • Anchors
  • Meta Sequences
  • Quantifiers
  • Group Constructs
  • Character Classes
  • Flags/Modifiers
  • Substitution
  • A single character of: a, b or c
    [abc]
  • A character except: a, b or c
    [^abc]
  • A character in the range: a-z
    [a-z]
  • A character not in the range: a-z
    [^a-z]
  • A character in the range: a-z or A-Z
    [a-zA-Z]
  • Any single character
    .
  • Alternate - match either a or b
    a|b
  • Any whitespace character
    \s
  • Any non-whitespace character
    \S
  • Any digit
    \d
  • Any non-digit
    \D
  • Any word character
    \w
  • Any non-word character
    \W
  • Non-capturing group
    (?:...)
  • Capturing group
    (...)
  • Zero or one of a
    a?
  • Zero or more of a
    a*
  • One or more of a
    a+
  • Exactly 3 of a
    a{3}
  • 3 or more of a
    a{3,}
  • Between 3 and 6 of a
    a{3,6}
  • Start of string
    ^
  • End of string
    $
  • A word boundary
    \b
  • Non-word boundary
    \B

Regular Expression
Processing...

Test String

Code Generator

Generated Code

import Foundation let pattern = #"Call-ID: (?P<method>[A-Za-z0-9_]+)-"# let regex = try! NSRegularExpression(pattern: pattern) let testString = #""" -------------------------- LTETAS99A -------------------------- SUNGSU 2019-10-14 13:33:45.554 MON ON LTETASOMP99 MSIPX3 RECV REQUEST FROM 172.28.109.98:5067 Src Addr : <211.188.227.6:8102> Dest Addr : <211.188.227.6:5083> From : <01052938592> To : <01020259013> Size : 2206 Bytes (sip:1740, body:466) SIP MSG ::= { INVITE tel:01020259013;phone-context=sktims.net SIP/2.0 INVITE sip:01089186220@sktims.net SIP/2.0 BYE sip:CSM1MSIPX1@172.28.109.115:5073;tu=3 SIP/2.0 REGISTER sip:rvtas22.sktims.net;lr SIP/2.0 REGISTER sip:scscf24.sktims.net;lr SIP/2.0 INVITE tel:01054736915;phone-context=sktims.net SIP/2.0 INVITE sip:ivr@icrbt08.sktims.net SIP/2.0 INVITE tel:01054736915;phone-context=sktims.net SIP/2.0 INVITE sip:01054736915@sktims.net SIP/2.0 INVITE sip:01054736915@sktims.net SIP/2.0 ACK sip:pointi_service@192.168.152.88:5060 SIP/2.0 PRACK sip:CSM1MSIPX2@223.38.5.33:5072;tu=2;orig SIP/2.0 PRACK sip:CSM1MSIPX1@223.38.5.32:5073;tu=2 SIP/2.0 PRACK sip:CSM1MSIPX1@223.38.5.32:5073;tu=2 SIP/2.0 INFO sip:pointi_service@192.168.152.88:5060 SIP/2.0 INFO sip:MSIPX@223.38.5.32:5075;tu=2;mrf SIP/2.0 BYE sip:pointi_service@192.168.152.88:5060 SIP/2.0 ACK sip:CSM1MSIPX2@223.38.5.33:5072;tu=2;orig SIP/2.0 ACK sip:CSM1MSIPX1@223.38.5.32:5073;tu=2 SIP/2.0 ACK sip:CSM1MSIPX1@223.38.5.32:5073;tu=2 SIP/2.0 ACK sip:01054736915@172.28.109.82:5180 SIP/2.0 Record-Route: <sip:SCSM3-ut00so-tu11@172.28.109.98:5067;lr> Route: <sip:orig@otas99.sktims.net;lr> Route: <sip:SCSM3-orig-tu111571027625-45014022@172.28.109.98:5067;lr> Via: SIP/2.0/UDP 172.28.109.98:5067;branch=z9hG4bK%11%%SCSM3-tu11-cmo-rru'SCSM3-ut00so-tu11'%7fdfdbcfb8e0437a1359_7c935;received=211.188.227.6;rport=8102 Via: SIP/2.0/UDP 172.28.109.89:5180;branch=z9hG4bK7fd208892a703e0cad3e_6fba8 P-Asserted-Identity: sip:01052938592@sktims.net Max-Forwards: 68 To: <tel:01020259013;phone-context=sktims.net> From: <sip:01052938592@sktims.net>;tag=36df023a From: <tel:01085222359;phone-context=sktims.net>;tag=2a4f25f7e38c1 From: <sip:114@sktims.net>;tag=337259 From: "SKi…”e??i½¤e³?e°?i?¼i?°"<sip:114@sktims.net>;tag=62a4a407689e7 Call-ID: H_ABC242A-nDcgZ_h6tWoSp7HAheBprQ..@2001:2d8:234:aa35::56a1:70a5 Call-ID: SCSM1-H_ABC231A-44fkaDYDRUtGXwlkoMaWzg..@2001:2d8:e90f:ab33::24fe:e0a4 Call-ID: H_ABC231A-44fkaDYDRUtGXwlkoMaWzg..@2001:2d8:e90f:ab33::24fe:e0a4 Call-ID: SCSM1-H_ABC231A-44fkaDYDRUtGXwlkoMaWzg..@2001:2d8:e90f:ab33::24fe:e0a4 Call-ID: ob2bua-8V4536iZxSmCHgMmCJfk2w..@2001:2d8:6557:4c99::110:c855 Call-ID: MR22I1X2_0760e01b-c49730-955496be5d-B3F97470-e4a-a4330-005ff403@223.38.5.32 Call-ID: OT23C122_ob2bua-8V4536iZxSmCHgMmCJfk2w..@2001:2d8:6557:4c99::110:c855 Call-ID: OT23C122_ob2bua-8V4536iZxSmCHgMmCJfk2w..@2001:2d8:6557:4c99::110:c855 Call-ID: OT23C122_ob2bua-8V4536iZxSmCHgMmCJfk2w..@2001:2d8:6557:4c99::110:c855 Call-ID: TT22C112_OT23C122_ob2bua-8V4536iZxSmCHgMmCJfk2w..@2001:2d8:6557:4c99::110:c855 Call-ID: TT22C112_OT23C122_ob2bua-8V4536iZxSmCHgMmCJfk2w..@2001:2d8:6557:4c99::110:c855 Call-ID: TT22C112_OT23C122_ob2bua-8V4536iZxSmCHgMmCJfk2w..@2001:2d8:6557:4c99::110:c855 Call-ID: OT23C122_ob2bua-8V4536iZxSmCHgMmCJfk2w..@2001:2d8:6557:4c99::110:c855 Call-ID: OT23C122_ob2bua-8V4536iZxSmCHgMmCJfk2w..@2001:2d8:6557:4c99::110:c855 Call-ID: ob2bua-8V4536iZxSmCHgMmCJfk2w..@2001:2d8:6557:4c99::110:c855 Call-ID: MR22I1X2_0760e01b-c49730-955496be5d-B3F97470-e4a-a4330-005ff403@223.38.5.32 Call-ID: ob2bua-8V4536iZxSmCHgMmCJfk2w..@2001:2d8:6557:4c99::110:c855 Call-ID: OT23C122_ob2bua-8V4536iZxSmCHgMmCJfk2w..@2001:2d8:6557:4c99::110:c855 Call-ID: OT23C122_ob2bua-8V4536iZxSmCHgMmCJfk2w..@2001:2d8:6557:4c99::110:c855 Call-ID: OT23C122_ob2bua-8V4536iZxSmCHgMmCJfk2w..@2001:2d8:6557:4c99::110:c855 Call-ID: OT23C122_ob2bua-8V4536iZxSmCHgMmCJfk2w..@2001:2d8:6557:4c99::110:c855 Call-ID: ob2bua-8V4536iZxSmCHgMmCJfk2w..@2001:2d8:6557:4c99::110:c855 Call-ID: MR22I1X2_0760e01b-c49730-955496be5d-B3F97470-e4a-a4330-005ff403@223.38.5.32 Call-ID: MR22I1X2_0760e01b-c49730-955496be5d-B3F97470-e4a-a4330-005ff403@223.38.5.32 Call-ID: MR22I1X2_0760e01b-c49730-955496be5d-B3F97470-e4a-a4330-005ff403@223.38.5.32 Call-ID: MR22I1X2_0760e01b-c49730-955496be5d-B3F97470-e4a-a4330-005ff403@223.38.5.32 Call-ID: MR22I1X2_0760e01b-c49730-955496be5d-B3F97470-e4a-a4330-005ff403@223.38.5.32 Call-ID: OT23C122_ob2bua-8V4536iZxSmCHgMmCJfk2w..@2001:2d8:6557:4c99::110:c855 Call-ID: OT23C122_ob2bua-8V4536iZxSmCHgMmCJfk2w..@2001:2d8:6557:4c99::110:c855 Call-ID: ob2bua-8V4536iZxSmCHgMmCJfk2w..@2001:2d8:6557:4c99::110:c855 Call-ID: MR22I1X2_0760e01b-c49730-955496be5d-B3F97470-e4a-a4330-005ff403@223.38.5.32 Call-ID: TT22C112_OT23C122_ob2bua-8V4536iZxSmCHgMmCJfk2w..@2001:2d8:6557:4c99::110:c855 Call-ID: OT23C122_ob2bua-8V4536iZxSmCHgMmCJfk2w..@2001:2d8:6557:4c99::110:c855 Call-ID: OT23C122_ob2bua-8V4536iZxSmCHgMmCJfk2w..@2001:2d8:6557:4c99::110:c855 Call-ID: ob2bua-8V4536iZxSmCHgMmCJfk2w..@2001:2d8:6557:4c99::110:c855 Call-ID: ob2bua-8V4536iZxSmCHgMmCJfk2w..@2001:2d8:6557:4c99::110:c855 Call-ID: OT23C122_ob2bua-8V4536iZxSmCHgMmCJfk2w..@2001:2d8:6557:4c99::110:c855 Call-ID: OT23C122_ob2bua-8V4536iZxSmCHgMmCJfk2w..@2001:2d8:6557:4c99::110:c855 Call-ID: TT22C112_OT23C122_ob2bua-V4536iZxSmCHgMmCJfk2w..@2001:2d8:6557:4c99::110:c855 CSeq: 1 INVITE Session-Expires: 1800;refresher=uac Allow: INVITE, ACK, OPTIONS, CANCEL, BYE, UPDATE, INFO, REFER, NOTIFY, MESSAGE, PRACK Content-Type: application/sdp Supported: timer, 100rel, sec-agree User-Agent: TTA-VoLTE/3.0 SM-G977N/SH6_SH6 Device_Type/Android_Phone SKT Accept-Contact: *;+g.3gpp.icsi-ref="urn%3Aurn-7%3A3gpp-service.ims.icsi.mmtel";require;explicit P-Early-Media: supported P-TTA-VoLTE-Info: avchange P-Access-Network-Info: 3GPP-E-UTRAN-FDD;utran-cell-id-3gpp=45005080a074af8b Content-Length: 466 Contact: <sip:01052938592-517b78dfb70cccf4@172.28.109.89:5180;ep=[2001:2d8:234:aa35::56a1:70a5]:6200;fw=[2001:2d8:234:aa35::56a1:70a5]:6200;ipsec>;+g.3gpp.icsi-ref="urn%3Aurn-7%3A3gpp-service.ims.icsi.mmtel";video P-Served-User: <sip:01052938592@sktims.net>;sescase=orig;regstate=reg P-Charging-Vector: icid-value="abc24.sktims.net-s-6d9061000e2d4be3" P-Asserted-Service: urn:urn-7:3gpp-service.ims.icsi.mmtel P-Charging-Function-Addresses: ccf="aaa://imscg4.sktims.net"; ccf="aaa://imscg3.sktims.net" v=0 o=abc 1571027623778107 0 IN IP4 172.28.107.172 s=- c=IN IP4 172.28.107.172 t=0 0 m=audio 46284 RTP/AVP 110 100 98 103 101 b=AS:42 b=RS:0 b=RR:800 a=rtpmap:110 EVS/16000 a=fmtp:110 br=9.6-24.4;bw=nb-swb a=rtpmap:100 AMR-WB/16000/1 a=fmtp:100 octet-align=1 a=rtpmap:98 AMR/8000/1 a=fmtp:98 octet-align=1 a=rtpmap:103 telephone-event/16000 a=fmtp:103 0-15 a=rtpmap:101 telephone-event/8000 a=fmtp:101 0-15 a=sendrecv a=ptime:20 a=maxptime:120 } COMPLETED """# let stringRange = NSRange(location: 0, length: testString.utf16.count) let matches = regex.matches(in: testString, range: stringRange) var result: [[String]] = [] for match in matches { var groups: [String] = [] for rangeIndex in 1 ..< match.numberOfRanges { let nsRange = match.range(at: rangeIndex) guard !NSEqualRanges(nsRange, NSMakeRange(NSNotFound, 0)) else { continue } let string = (testString as NSString).substring(with: nsRange) groups.append(string) } if !groups.isEmpty { result.append(groups) } } print(result)

Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Swift 5.2, please visit: https://developer.apple.com/documentation/foundation/nsregularexpression