Regular Expressions 101

Community Patterns

1

URL (URI) - TOTAL Breakdown: Named Groups (Supporting Literal, Relative, Dynamic URLs, with/without Filename/Ext, Query Parameters and/or Anchor Tags)

Created·2023-09-08 16:51
Updated·2023-09-08 16:54
Flavor·JavaScript
Need to FULLY Break Out EVERY Component of a URL? Like, as in "every constituent element individually accessible in its own named capture group?" Need it to be pre-optimized and fully ECMA-compliant? Want to see exhaustive unit tests proving these claims (144 are included; all 144 execute in 6.5ms. Total.)? Then you just lucked out. What Does It Do? Fully breaks down a URL, acting the same (meaning the same capture group names apply regardless of use case; makes for MUCH easier interaction in ones code) on: Relative Paths (./, .//) Absolute Paths (/) Fully-qualified domains (https://www.domain.com/) Partially-qualified domains (https://domain.com/) Dynamically-protocol'd domains (//domain.com/) ...with each separated out into HOST, PROTOCOL, DOMAIN, and RELATIVE path prefix. BUT WAIT! THERE'S MORE! It then further proceeds to break out (also into individually-named groups, but only when present): URI Path (/some/path/to/a/file/) Full File Name, with or without Extension (filename.ext) File Name (filename) Extension (.ext) QueryString Parameters (?query=string) Anchor Tags/Routing (#SomeAnchor) Best of all, EVERY ONE of these are delivered in named capture groups (so you're looking at obj.groups.DOMAIN instead of object[3]) Examples: Fully-Qualified Domain Full Request: https://www.domain.com/some/path/to/a/file-with.ext?Plus=QueryString#AndAnchor Host: https://www.domain.com/ Protocol: https:// Domain: www.domain.com/ Path: some/path/to/a/ FullFileName: file-with.ext FileName: file-with Extension: .ext QueryString: ?Plus=QueryString Anchor: #AndAnchor Relative Path Full Request: ../../../../some/path/to/a/file-with.ext?Plus=QueryString#AndAnchor Relative: ../../../../ Path: some/path/to/a/ FullFileName: file-with.ext FileName: file-with Extension: .ext QueryString: ?Plus=QueryString Anchor: #AndAnchor
Submitted by @JJ for Nerdy Deeds, LLC
0

Graphql parser for pretty printing

Created·2022-10-29 15:30
Flavor·Python
Parse Graphql queries Changelog (versions): Initial Version 2 is much improved and intended to integrate well with customized highlighting with the help of the awesome Rich library. Bug fixes and added rich example. Bugfixes and now the regex is actually recognizing the different parts of field_with_params. And an improved example to go with that. Todo (maybe): Improve the beginning, opening, closing and ending curly bracket recognition with better support for malformed queries and make sure there's only one BEGIN and one END in situations where newlines are present. Also differentiate between arbitrary text and actual graphql query language content. For example, the string "asdf" is currently recognized and categorized as a child_field when it shouldn't be recognized at all. Version 4 def pretty_query(query_string: str) -> str: import re from rich.console import Console from rich.highlighter import JSONHighlighter from rich.theme import Theme, DEFAULT_STYLES this is a string, not a tuple field_with_params_rgx = ( r'(?P+' # fields with parameters r'(?P\()' # opening parenthesis r'(?P\w+)\s?' # keywords and colons r'(?P\:)\s?' # keywords and colons r'(?P' # parameter values r'(?P\[?).+?' # opening square bracket r'(?P\]?))\s?' # closing square bracket r'(?P\)))' # closing parenthesis ) regexes = [ field_with_params_rgx, r'(?P^\{)|(?P\{)|(?P\}$)|(?P\})', # curly brackets r'(?P(?P\.{3})\s*?(?Pon)\s+?(?P\w+))', # fragments r'(?P(?!(?P=field_with_params)|(?P=fragment))\w+)(?=\s*?\{)', # parent fields r'(?P(?!(?P=field_with_params)|(?P=fragment))\w+)', # child fields ] indent = 2 count = 0 parts = [] for x in re.finditer('|'.join(rgx for rgx in regexes), query_string): data = x.groupdict() string = '' BEGIN = data['BEGIN'] open = data['open'] parent_field = data['field_with_params'] or data['parent_field'] child_field = data['child_field'] fragment = data['fragment'] close = data['close'] END = data['END'] if BEGIN: string += BEGIN count += indent if open: count += indent continue if parent_field: string += '{0: >{fill}}{value} {{'.format(' ', value=parent_field, fill=count) if child_field: string += '{0: >{fill}}{value}'.format(' ', value=child_field, fill=count) if fragment: string += '{0: >{fill}}{value} {{'.format(' ', value=fragment, fill=count) if close: count -= indent string += '{0: >{fill}}{value}'.format(' ', value=close, fill=count) if END: string += END count -= indent parts.append(string) class GQLHighlighter(JSONHighlighter): base_style = "gql." highlights = ['|'.join(rgx for rgx in regexes)] + JSONHighlighter.highlights theme = Theme({ **{ f'gql.{k}': DEFAULT_STYLES[f'json.{k}'] for k in ['brace', 'bool_true', 'bool_false', 'null', 'number', 'str', 'key'] }, 'gql.BEGIN': 'bold green', 'gql.END': 'bold green', 'gql.open': 'bold yellow', 'gql.close': 'bold blue', 'gql.field_with_params': 'bold blue', 'gql.parent_field': 'bold white', 'gql.child_field': 'italic green', 'gql.fragment': 'bold yellow', 'gql.dots': 'bold white', 'gql.on': 'green', 'gql.frag_field': 'bold magenta italic', 'gql.parenth_open': 'blue', 'gql.parenth_close': 'green', 'gql.keyword': 'yellow', 'gql.colon': 'blue', 'gql.list_open': 'bold yellow', 'gql.list_close': 'bold yellow', 'gql.value': 'cyan', }) console = Console(highlighter=GQLHighlighter(), theme=theme) console.print('\n'.join(parts)) return '\n'.join(parts)
Submitted by iwconfig

Community Library Entry

1

Regular Expression
Created·2021-10-03 22:46
Flavor·PCRE2 (PHP)

/
(?:call|CALL)[\ *](?:(?:system|"system").(?:runtime|"runtime").(?:kill_query|"kill_query"))
/
gm
Open regex in editor

Description

trino kill query

Submitted by anonymous