Regular Expressions 101

Community Patterns

22

Get path from any text

Created·2023-01-31 14:38
Updated·2023-07-23 20:17
Flavor·PCRE2 (PHP)
Recommended·
Get path (windows style) from any type of text (error message, e-mail corps ...), quoted or not. THIS IS THE SINGLE LINE VERSION ! If you want understand how it work or edit it, go https://regex101.com/r/7o2fyy Relative path are not supported The goal is to catch what "Look like" a path. See the limitations UNC path and prefix path like //./], [//?/] or [//./UNC/] are allowed some url path like [file:///C:/] or [file://] are allowed Catch path quoted with ["] and [']. But these quotes are include with the catch Quoted path is not concerned by limitations Limitations : (only unquoted path) [dot] and [space] is allowed, but not in a row [dot+space] or [space+dot at end of file name isn't catched INSIDE A NAME FILE (or last directory if it is a path to a directory) : [comma] is not supported (it stop the catch) after a first [dot], any [space] stop the catch after a [space], catch is stoped if next character is not a [letter], [digit] or [-] so, double [space] stop the catch Compatibility compatible PCRE, PCRE2 AutoHotkey : don't forget to escape "%" in "`%" /!\ Powershell and .Net /!\\ : this regex need some modification to be interpreted by powershell. You have to replace each (?&CapturGroupName) by \k. Use this powershell code to do this replacement : ` $powershellRegex = @' [Put here the regex to replace (?&CapturGroupName) with \k] '@ -replace '\(\?&(\w+)\)', '\k' ` This example code must return : [Put here the regex to replace \k with \k]
Submitted by nitrateag

Community Library Entry

1

Regular Expression
Created·2026-07-05 22:53
Flavor·PCRE2 (PHP)

/
(?(DEFINE) (?<token> (?&identifier) | (?&boolean) | (?&number) | (?&character) | (?&string) | [()'`.] | \#(?:u8)?\( | ,@? ) (?<delimiter> (?&whitespace) | (?&vertical_line) | [()";] | $ ) (?<intraline_whitespace> [ \t] ) (?<whitespace> (?&intraline_whitespace) | (?&line_ending) ) (?<vertical_line> \| ) (?<line_ending> \n | \r\n? ) (?<comment> ;.*+ # all subsequent characters up to a line ending | (?&nested_comment) | \#; (?&intertoken_space) (?&datum) ) (?<nested_comment> \#\| (?&comment_text) (?&comment_cont)*+ \|\# ) (?<comment_text> # character sequence not including #| or |# (?: [^#|] | \#[^|] | \|[^#] )*+ ) (?<comment_cont> (?&nested_comment) (?&comment_text) ) (?<directive> \#!(?:no-)fold-case (?=(?&delimiter)) ) (?<atmosphere> (?&whitespace) | (?&comment) | (?&directive) ) (?<intertoken_space> (?&atmosphere)*+ ) (?<identifier> (?&initial) (?&subsequent)*+ | (?&vertical_line) (?&symbol_element)*+ (?&vertical_line) | (?&peculiar_identifier) ) (?<initial> (?&letter) | (?&special_initial) ) (?<letter> [a-zA-Z] ) (?<special_initial> [!$%&*\/:<=>?^_~] ) (?<subsequent> (?&initial) | (?&digit) | (?&special_subsequent) ) (?<digit> [0-9] ) (?<hex_digit> [0-9a-fA-F] ) (?<explicit_sign> [+-] ) (?<special_subsequent> (?&explicit_sign) | [.@] ) (?<inline_hex_escape> \\x(?&hex_scalar_value) ) (?<hex_scalar_value> [0-9a-fA-F]++ ) (?<mnemonic_escape> \\[abtnr] ) (?<peculiar_identifier> (?&explicit_sign) | (?&explicit_sign) (?&sign_subsequent) (?&subsequent)*+ | (?&explicit_sign)? \. (?&dot_subsequent) (?&subsequent)*+ ) (?<dot_subsequent> (?&sign_subsequent) | \. ) (?<sign_subsequent> (?&initial) | (?&explicit_sign) | @ ) (?<symbol_element> [^|\\] # any character other than vertical line or backslash | (?&inline_hex_escape) | (?&mnemonic_escape) | \\ \| ) (?<boolean> \#t(?:rue)? | \#f(?:alse)? ) (?<character> \# \\ (?: (?&character_name) | x (?&hex_scalar_value) | . | (?&line_ending) ) ) (?<character_name> alarm | backspace | delete | escape | newline | null | return | space | tab ) (?<string> " (?&string_element)* " ) (?<string_element> [^"\\] # any character other than " or \ | (?&mnemonic_escape) | \\ (?: [\\"] | (?&intraline_whitespace)* (?&line_ending) (?&intraline_whitespace)* ) | (?&inline_hex_escape) ) (?<bytevector> \#u8\( (?&ws)? (?: (?&byte) (?&ws) )* \) ) (?<byte> (?> (?: # any exact integer between 0 and 255 (?&prefix_2) 0* (?&digit_2){1,8} | (?&prefix_16) 0* (?&digit_16){1,2} | (?&prefix_8) 0* (?: 0 | [1-3] (?&digit_8){0,2} | [4-7](?&digit_8)? ) | (?&prefix_10) 0* (?: [0-9]{1,2} | 1 [0-9]{2} | 2 (?: [0-4][0-9] | 5[0-5] ) ) ) (?=(?&delimiter)) ) ) (?<number> (?&num_2) | (?&num_8) | (?&num_16) | (?&num_10) ) # the number stack (?<num_2> (?&prefix_2) (?&complex_2) ) (?<num_8> (?&prefix_8) (?&complex_8) ) (?<num_10> (?&prefix_10) (?&complex_10) ) (?<num_16> (?&prefix_16) (?&complex_16) ) (?<complex_2> (?&real_2) (?: @ (?&real_2) | [+-] (?&ureal_2)? i | (?&infnan) i | )? | [+-] (?&ureal_2)? i | (?&infnan) i ) (?<complex_8> (?&real_8) (?: @ (?&real_8) | [+-] (?&ureal_8)? i | (?&infnan) i | )? | [+-] (?&ureal_8)? i | (?&infnan) i ) (?<complex_10> (?&real_10) (?: @ (?&real_10) | [+-] (?&ureal_10)? i | (?&infnan) i | )? | [+-] (?&ureal_10)? i | (?&infnan) i ) (?<complex_16> (?&real_16) (?: @ (?&real_16) | [+-] (?&ureal_16)? i | (?&infnan) i | )? | [+-] (?&ureal_16)? i | (?&infnan) i ) (?<real_2> (?&sign) (?&ureal_2) | (?&infnan) ) (?<real_8> (?&sign) (?&ureal_8) | (?&infnan) ) (?<real_10> (?&sign) (?&ureal_10) | (?&infnan) ) (?<real_16> (?&sign) (?&ureal_16) | (?&infnan) ) (?<ureal_2> (?&uinteger_2) (?: \/ (?&uinteger_2) )? ) (?<ureal_8> (?&uinteger_8) (?: \/ (?&uinteger_8) )? ) (?<ureal_10> (?&uinteger_10) (?: \/ (?&uinteger_10) )? | (?&decimal_10) ) (?<ureal_16> (?&uinteger_16) (?: \/ (?&uinteger_16) )? ) (?<decimal_10> (?&uinteger_10) (?: \. (?&digit_10)++ )? (?&suffix) | \. (?&digit_10)++ (?&suffix) ) (?<uinteger_2> [01]++ ) (?<uinteger_8> [0-7]++ ) (?<uinteger_10> [0-9]++ ) (?<uinteger_16> [0-9a-fA-F]++ ) (?<prefix_2> (?&radix_2) (?&exactness) | (?&exactness) (?&radix_2) ) (?<prefix_8> (?&radix_8) (?&exactness) | (?&exactness) (?&radix_8) ) (?<prefix_10> (?&radix_10) (?&exactness) | (?&exactness) (?&radix_10) ) (?<prefix_16> (?&radix_16) (?&exactness) | (?&exactness) (?&radix_16) ) (?<infnan> [+-] (?: inf | nan ) \. 0 ) (?<suffix> (?: (?&exponent_marker) (?&sign) (?&digit_10)++ )? ) (?<exponent_marker> e ) (?<sign> [+-]? ) (?<exactness> (?:\#[ieIE])? ) (?<radix_2> \#[bB] ) (?<radix_8> \#[oO] ) (?<radix_10> (?: \#[dD] )? ) (?<radix_16> \#[xX] ) (?<digit_2> [01] ) (?<digit_8> [0-7] ) (?<digit_10> [0-9] ) (?<digit_16> [0-9a-fA-F] ) ### External Representation (?<datum> (?&simple_datum) | (?&compound_datum) | (?&label) (?: = (?&datum) | \# ) ) (?<simple_datum> (?&boolean) | (?&number) | (?&character) | (?&string) | (?&symbol) | (?&bytevector) ) (?<symbol> (?&identifier) ) (?<compound_datum> (?&list) | (?&vector) | (?&abbreviation) ) (?<list> \( (?&ws)? (?: (?: (?&datum) (?&ws) )+ (?: \. (?&ws) (?&datum) )? )? \) ) (?<abbreviation> (?&abbrev_prefix) (?&datum) ) (?<abbrev_prefix> ['`] | ,@? ) (?<vector> \#\( (?&ws)? (?: (?&datum) (?: (?&ws) (?&datum) )* (?&ws)? \) ) (?<label> \# (?&uinteger_10) ) (?<ws> \s++ (?: (?&comment) \s*+ )*+ | (?= [()";|] | $ ) ) ) ) (?&datum)
/
gxui
Open regex in editor

Description

Matches Scheme programs as described by https://small.r7rs.org/attachment/r7rs.pdf

Submitted by stellartux