{"id":2194,"date":"2014-04-14T11:16:48","date_gmt":"2014-04-14T11:16:48","guid":{"rendered":"http:\/\/blog.bachi.net\/?p=2194"},"modified":"2023-09-29T16:39:11","modified_gmt":"2023-09-29T16:39:11","slug":"regular-expression","status":"publish","type":"post","link":"https:\/\/blog.bachi.net\/?p=2194","title":{"rendered":"RegEx: Regular Expression"},"content":{"rendered":"<p><a href=\"https:\/\/regexr.com\/\">regexr<\/a><br \/>\n<a href=\"https:\/\/regex101.com\/\">regex101<\/a><br \/>\n<a href=\"https:\/\/www.regextester.com\/15\">regextester<\/a><\/p>\n<p><a href=\"https:\/\/www.freecodecamp.org\/news\/practical-regex-guide-with-real-life-examples\/\">A Practical Guide to Regular Expressions \u2013 Learn RegEx with Real Life Examples<\/a><\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nabc         Letters\r\n123         Digits\r\n\\.          Period\r\n\r\n&#x5B;abc]       Only a, b, or c\r\n&#x5B;^abc]      Not a, b, nor c\r\n&#x5B;a-z]       Characters a to z\r\n&#x5B;0-9]       Numbers 0 to 9\r\n\r\n{m}         m Repetitions\r\n{m,n}       m to n Repetitions\r\n*           Zero or more repetitions\r\n+           One or more repetitions\r\n?           Optional character\r\n.           Any Character\r\n\r\n^\u2026$         Starts and ends\r\n(\u2026)         Capture Group\r\n(a(bc))     Capture Sub-group\r\n(.*)        Capture all\r\n(abc|def)   Matches abc or def\r\n\r\n\\s          Any Whitespace\r\n&#x5B; ]         Whitespace\r\n\\S          Any Non-whitespace character\r\n\\d          Any Digit\r\n\\D          Any Non-digit character\r\n\\w          Any Alphanumeric character &#x5B;a-zA-Z_0-9]\r\n\\W          Any Non-alphanumeric character\r\n\r\nNon-capturing group:\r\n(?:expression)\r\n\r\nLook-around assertions:\r\n(?&lt;=expression) = positive look-behind assertion\r\n(?=expression)  = positive look-ahead assertion\r\n<\/pre>\n<p><!-- ------------------------------------------------------------------------ --><\/p>\n<h4>Capture Groups<\/h4>\n<p><a href=\"https:\/\/www.regular-expressions.info\/refcapture.html\">Capturing Groups and Backreferences<\/a><br \/>\n<a href=\"https:\/\/www.educative.io\/answers\/what-is-a-non-capturing-group-in-regular-expressions\">What is a non-capturing group in regular expressions?<\/a><\/p>\n<blockquote><p>The only difference between capture groups and non-capture groups is that the former captures the matched character sequences for possible later re-use with a numbered back reference while a non-capture group does not.<\/p><\/blockquote>\n<p><!-- ------------------------------------------------------------------------ --><\/p>\n<h4>RegexOne &#8211; with Exercises<\/h4>\n<p><a href=\"https:\/\/regexone.com\/lesson\/capturing_groups\">Lesson 11: Match groups \/ Capture group<\/a><\/p>\n<p><!-- ========================================================================================= --><\/p>\n<h1>Exercise<\/h1>\n<p><!-- ------------------------------------------------------------------------ --><\/p>\n<h4>List of single characters<\/p>\n<h4>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nFile:\r\nhat\r\ntut\r\ncat\r\nblue\r\nred\r\nzat\r\nbet\r\ntat\r\nmet\r\nmat\r\n\r\nRegEx:\r\n&#x5B;htm]at =&gt; matches &quot;hat&quot;, &quot;tat&quot;, &quot;mat&quot;\r\n\r\nRegEx:\r\n&#x5B;^htm]at =&gt; matches &quot;.at&quot; except &quot;hat&quot;, &quot;tat&quot;, &quot;mat&quot;\r\nResult: &quot;cat&quot;, &quot;zat&quot;\r\n<\/pre>\n<p><!-- ------------------------------------------------------------------------ --><\/p>\n<h4>Whitespace at the beginning or end of a line<\/h4>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\n^&#x5B; \\t]+|&#x5B; \\t]+$\r\n\r\nExplanation:\r\n^   Start of line\r\n&#x5B; ] List of single characters: Space and Tab\r\n+   One or more occurrences\r\n|   OR\r\n$   End of line\r\n<\/pre>\n<p><!-- ------------------------------------------------------------------------ --><\/p>\n<h4>Remove newlines<\/h4>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nFile:\r\naaa\r\nbbb\r\nccc\r\n\r\nRegEx: '(?&lt;=^.+)\\n'\r\n\r\nResult:\r\naaabbbccc\r\n<\/pre>\n<p><!-- ------------------------------------------------------------------------ --><\/p>\n<h4>Cut out only define name<\/h4>\n<pre class=\"brush: plain; title: Original; notranslate\" title=\"Original\">\r\n#define DEFAULT_CLOCK_BLA                      MAC_ADD_HEAD_1,0xff,0xfe,MAC_ADD_HEAD_2,SR_NR\r\n<\/pre>\n<p>Remove #define:<\/p>\n<pre class=\"brush: plain; title: Result; notranslate\" title=\"Result\">\r\nDEFAULT_CLOCK_BLA                      MAC_ADD_HEAD_1,0xff,0xfe,MAC_ADD_HEAD_2,SR_NR\r\n<\/pre>\n<pre class=\"brush: plain; title: RegEx; notranslate\" title=\"RegEx\">\r\nSearch:  '(?&lt;=(^&#x5B;\\w]+))&#x5B;\\s]*&#x5B;\\w\\,]*(?=($))'\r\nReplace: ''\r\n<\/pre>\n<pre class=\"brush: plain; title: Result; notranslate\" title=\"Result\">\r\nDEFAULT_CLOCK_BLA\r\n<\/pre>\n<p><!-- ------------------------------------------------------------------------ --><\/p>\n<h4>Append parameter list<\/h4>\n<pre class=\"brush: plain; title: Original; notranslate\" title=\"Original\">\r\ndefault_clock_bla\r\n<\/pre>\n<pre class=\"brush: plain; title: RegEx; notranslate\" title=\"RegEx\">\r\nSearch:  '(?&lt;=(^&#x5B;\\w]+))\\s*(?=($))'\r\nReplace: '(void);'\r\n<\/pre>\n<pre class=\"brush: plain; title: Result; notranslate\" title=\"Result\">\r\ndefault_clock_bla(void);\r\n<\/pre>\n<p><!-- ------------------------------------------------------------------------ --><\/p>\n<h4>Trim to only have one space<\/h4>\n<pre class=\"brush: plain; title: Original; notranslate\" title=\"Original\">\r\nbool                            default_clock_bla(void);\r\n<\/pre>\n<pre class=\"brush: plain; title: RegEx; notranslate\" title=\"RegEx\">\r\nSearch:  '(?&lt;=(^&#x5B;\\w]+))\\s+'\r\nReplace: ' '\r\n<\/pre>\n<pre class=\"brush: plain; title: Result; notranslate\" title=\"Result\">\r\nbool default_clock_bla(void);\r\n<\/pre>\n<p><!-- ------------------------------------------------------------------------ --><\/p>\n<h4>Separate result type from function name<\/h4>\n<pre class=\"brush: plain; title: Original; notranslate\" title=\"Original\">\r\nbool default_clock_bla(void);\r\n<\/pre>\n<pre class=\"brush: plain; title: RegEx; notranslate\" title=\"RegEx\">\r\nSearch:  '(?&lt;=(^&#x5B;\\w]+))\\s'\r\nReplace: '\\n'\r\n<\/pre>\n<pre class=\"brush: plain; title: Result; notranslate\" title=\"Result\">\r\nbool\r\ndefault_clock_bla(void);\r\n<\/pre>\n<p><!-- ------------------------------------------------------------------------ --><\/p>\n<h4>Add curly brackets<\/h4>\n<pre class=\"brush: plain; title: Original; notranslate\" title=\"Original\">\r\nbool\r\ndefault_clock_bla(void);\r\n<\/pre>\n<pre class=\"brush: plain; title: RegEx; notranslate\" title=\"RegEx\">\r\nSearch:  ';(?=($))'\r\nReplace: '\\n{\\n    \\n}\\n'\r\n<\/pre>\n<pre class=\"brush: plain; title: Result; notranslate\" title=\"Result\">\r\nbool\r\ndefault_clock_bla(void)\r\n{\r\n    \r\n}\r\n<\/pre>\n<p><!-- ------------------------------------------------------------------------ --><\/p>\n<h4>Add <name> to every line<\/h4>\n<pre class=\"brush: plain; title: Original; notranslate\" title=\"Original\">\r\nDEVICE_I2CSLAVE=1\r\nTARGET_LIKE_MBED\r\nDEVICE_PORTOUT=1\r\nDEVICE_PORTINOUT=1\r\nTARGET_RTOS_M4_M7\r\n<\/pre>\n<pre class=\"brush: plain; title: RegEx; notranslate\" title=\"RegEx\">\r\nSearch:  '(?&lt;=.*)^'\r\nReplace: '&lt;name&gt;'\r\n\r\nSearch:  '=1$'\r\nReplace: '&lt;\/name&gt;&lt;value&gt;1&lt;\/value&gt;'\r\n<\/pre>\n<pre class=\"brush: plain; title: Result; notranslate\" title=\"Result\">\r\n&lt;name&gt;DEVICE_I2CSLAVE&lt;\/name&gt;&lt;value&gt;1&lt;\/value&gt;\r\n&lt;name&gt;TARGET_LIKE_MBED\r\n&lt;name&gt;DEVICE_PORTOUT&lt;\/name&gt;&lt;value&gt;1&lt;\/value&gt;\r\n&lt;name&gt;DEVICE_PORTINOUT&lt;\/name&gt;&lt;value&gt;1&lt;\/value&gt;\r\n&lt;name&gt;TARGET_RTOS_M4_M7\r\n<\/pre>\n<p><!-- ------------------------------------------------------------------------ --><\/p>\n<h4>Add suffix if line-end is NOT &#8220;>&#8221;<\/h4>\n<pre class=\"brush: plain; title: Original; notranslate\" title=\"Original\">\r\n&lt;name&gt;DEVICE_I2CSLAVE&lt;\/name&gt;&lt;value&gt;1&lt;\/value&gt;\r\n&lt;name&gt;TARGET_LIKE_MBED\r\n&lt;name&gt;DEVICE_PORTOUT&lt;\/name&gt;&lt;value&gt;1&lt;\/value&gt;\r\n&lt;name&gt;DEVICE_PORTINOUT&lt;\/name&gt;&lt;value&gt;1&lt;\/value&gt;\r\n&lt;name&gt;TARGET_RTOS_M4_M7\r\n<\/pre>\n<pre class=\"brush: plain; title: RegEx; notranslate\" title=\"RegEx\">\r\nSearch:  '(?&lt;=&#x5B;^&gt;]$)'\r\nReplace: '&lt;\/name&gt;&lt;value\/&gt;'\r\n<\/pre>\n<pre class=\"brush: plain; title: Result; notranslate\" title=\"Result\">\r\n&lt;name&gt;DEVICE_I2CSLAVE&lt;\/name&gt;&lt;value&gt;1&lt;\/value&gt;\r\n&lt;name&gt;TARGET_LIKE_MBED&lt;\/name&gt;&lt;value\/&gt;\r\n&lt;name&gt;DEVICE_PORTOUT&lt;\/name&gt;&lt;value&gt;1&lt;\/value&gt;\r\n&lt;name&gt;DEVICE_PORTINOUT&lt;\/name&gt;&lt;value&gt;1&lt;\/value&gt;\r\n&lt;name&gt;TARGET_RTOS_M4_M7&lt;\/name&gt;&lt;value\/&gt;\r\n<\/pre>\n<p><!-- ------------------------------------------------------------------------ --><\/p>\n<h4>Embrace lines<\/h4>\n<pre class=\"brush: plain; title: Original; notranslate\" title=\"Original\">\r\n&lt;name&gt;DEVICE_I2CSLAVE&lt;\/name&gt;&lt;value&gt;1&lt;\/value&gt;\r\n&lt;name&gt;TARGET_LIKE_MBED&lt;\/name&gt;&lt;value\/&gt;\r\n&lt;name&gt;DEVICE_PORTOUT&lt;\/name&gt;&lt;value&gt;1&lt;\/value&gt;\r\n&lt;name&gt;DEVICE_PORTINOUT&lt;\/name&gt;&lt;value&gt;1&lt;\/value&gt;\r\n&lt;name&gt;TARGET_RTOS_M4_M7&lt;\/name&gt;&lt;value\/&gt;\r\n<\/pre>\n<pre class=\"brush: plain; title: RegEx; notranslate\" title=\"RegEx\">\r\nSearch:  '^(?=&lt;name&gt;.*)'\r\nReplace: '&lt;macro&gt;\\n'\r\n\r\nSearch:  '(?&lt;=.*&lt;\/value&gt;|&lt;value\/&gt;)'\r\nReplace: '\\n&lt;\/macro&gt;'\r\n<\/pre>\n<pre class=\"brush: plain; title: Result; notranslate\" title=\"Result\">\r\n&lt;macro&gt;\r\n&lt;name&gt;DEVICE_I2CSLAVE&lt;\/name&gt;&lt;value&gt;1&lt;\/value&gt;\r\n&lt;\/macro&gt;\r\n&lt;macro&gt;\r\n&lt;name&gt;TARGET_LIKE_MBED&lt;\/name&gt;&lt;value\/&gt;\r\n&lt;\/macro&gt;\r\n&lt;macro&gt;\r\n&lt;name&gt;DEVICE_PORTOUT&lt;\/name&gt;&lt;value&gt;1&lt;\/value&gt;\r\n&lt;\/macro&gt;\r\n&lt;macro&gt;\r\n&lt;name&gt;DEVICE_PORTINOUT&lt;\/name&gt;&lt;value&gt;1&lt;\/value&gt;\r\n&lt;\/macro&gt;\r\n&lt;macro&gt;\r\n&lt;name&gt;TARGET_RTOS_M4_M7&lt;\/name&gt;&lt;value\/&gt;\r\n&lt;\/macro&gt;\r\n<\/pre>\n<p><!-- ------------------------------------------------------------------------ --><\/p>\n<h4>Table to SQL <\/h4>\n<p><a href=\"https:\/\/stackoverflow.com\/questions\/34278844\/adding-quotation-marks-around-string-with-regex\">Adding Quotation marks around string with regex<\/a><\/p>\n<pre class=\"brush: plain; title: Original; notranslate\" title=\"Original\">\r\nJoy F 11 51.3 50.5\r\nJane F 12 59.8 84.5\r\nJim M 12 57.3 83.0\r\nAlice F 13 56.5 84.0\r\nJeff M 13 62.5 84.0\r\nBob M 14 64.2 90.0\r\nPhilip M 16 72.0 150.0\r\n<\/pre>\n<pre class=\"brush: plain; title: RegEx; notranslate\" title=\"RegEx\">\r\nSearch:  '&#x5B; ]'\r\nReplace: ', '\r\n\r\nSearch:  '(&#x5B;^\\s,.0-9]+)'\r\nReplace: ''$1''\r\n<\/pre>\n<pre class=\"brush: plain; title: Intermediate Result; notranslate\" title=\"Intermediate Result\">\r\n'Joy', 'F', 11, 51.3, 50.5\r\n'Jane', 'F', 12, 59.8, 84.5\r\n'Jim', 'M', 12, 57.3, 83.0\r\n'Alice', 'F', 13, 56.5, 84.0\r\n'Jeff', 'M', 13, 62.5, 84.0\r\n'Bob', 'M', 14, 64.2, 90.0\r\n'Philip', 'M', 16, 72.0, 150.0\r\n<\/pre>\n<pre class=\"brush: plain; title: RegEx; notranslate\" title=\"RegEx\">\r\nSearch:  '(?&lt;=^)'\r\nReplace: ') ,(\\n    '\r\n<\/pre>\n<pre class=\"brush: plain; title: Result; notranslate\" title=\"Result\">\r\n) ,(\r\n    'Joy', 'F', 11, 51.3, 50.5\r\n) ,(\r\n    'Jane', 'F', 12, 59.8, 84.5\r\n) ,(\r\n    'Jim', 'M', 12, 57.3, 83.0\r\n) ,(\r\n    'Alice', 'F', 13, 56.5, 84.0\r\n) ,(\r\n    'Jeff', 'M', 13, 62.5, 84.0\r\n) ,(\r\n    'Bob', 'M', 14, 64.2, 90.0\r\n) ,(\r\n    'Philip', 'M', 16, 72.0, 150.0\r\n<\/pre>\n<p><!-- ------------------------------------------------------------------------ --><\/p>\n<h4>Strip CC, only use source file<\/h4>\n<p>One-Liner<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nOriginal: CC -m64 -instances=global   -c -fast -g0 -I\/opt\/include -o build\/testGlobals.o ..\/app\/testGlobals.cpp\r\nSearch:   ^.* (.*)$\r\nReplace:  $1\r\nResult:   ..\/app\/testGlobals.cpp\r\n<\/pre>\n<p>Multi-Liner<\/p>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\nmkdir -p build\/x86_Release \r\nCC  -c -fast -g0  -I\/opt\/include -o build\/x86_Release\/dynamoGlobals.o dynamoGlobals.cpp\r\nCC: Warning: -xchip=native detection failed, falling back to -xchip=generic\r\nmkdir -p build\/x86_Release \/_ext\/710760585\r\nCC  -c -fast -g0  -I\/opt\/include   -o build\/x86_Release\/_ext\/710760585\/TValueList.o ..\/dynamo_base\/TValueList.cpp\r\nCC: Warning: -xchip=native detection failed, falling back to -xchip=generic\r\nmkdir -p build\/x86_Release \/_ext\/710760585\r\nCC  -c -fast -g0  -I\/opt\/include   -o build\/x86_Release\/_ext\/710760585\/UProductConstructor.o ..\/dynamo_base\/UProductConstructor.cpp\r\nCC: Warning: -xchip=native detection failed, falling back to -xchip=generic\r\nmkdir -p build\/x86_Release \/_ext\/710760585\r\n<\/pre>\n<pre class=\"brush: plain; title: RegEx; notranslate\" title=\"RegEx\">\r\nSearch:  '^(?!CC ).*$\\n?'\r\nReplace: ''\r\n\r\nSearch:  '^.* (.*)$'\r\nReplace: '$1'\r\n<\/pre>\n<pre class=\"brush: plain; title: ; notranslate\" title=\"\">\r\ndynamoGlobals.cpp\r\n..\/dynamo_base\/TValueList.cpp\r\n..\/dynamo_base\/UProductConstructor.cpp\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>regexr regex101 regextester A Practical Guide to Regular Expressions \u2013 Learn RegEx with Real Life Examples abc Letters 123 Digits \\. Period &#x5B;abc] Only a, b, or c &#x5B;^abc] Not a, b, nor c &#x5B;a-z] Characters a to z &#x5B;0-9] Numbers 0 to 9 {m} m Repetitions {m,n} m to n Repetitions * Zero or [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-2194","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/blog.bachi.net\/index.php?rest_route=\/wp\/v2\/posts\/2194","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.bachi.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.bachi.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.bachi.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.bachi.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2194"}],"version-history":[{"count":24,"href":"https:\/\/blog.bachi.net\/index.php?rest_route=\/wp\/v2\/posts\/2194\/revisions"}],"predecessor-version":[{"id":14254,"href":"https:\/\/blog.bachi.net\/index.php?rest_route=\/wp\/v2\/posts\/2194\/revisions\/14254"}],"wp:attachment":[{"href":"https:\/\/blog.bachi.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2194"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.bachi.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2194"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.bachi.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2194"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}