Regular Expressions 101

Community Library

2

JSON Parser for .NET

Created·2026-07-25 18:00
Updated·2026-08-01 19:10
Type·Match
Flavor·.NET 10.0 (C#)
JSON Parser This regular expression is designed to tokenize JSON-like content embedded in INI files. It is not a full JSON validator; instead, it provides a lightweight lexical scanner that identifies structural tokens (objects, arrays, strings, numbers, booleans, null) and ignores comments and whitespace. The token stream is then processed by a hand‑written recursive‑descent parser (with depth‑limit protection) to build a .NET object graph (Dictionary, object], or primitives). Regex Pattern (?//.|/\.?\/)| (?""(?:\\.)"")(?=(?:\s|//.|/\.?\/):)| (?(?true)|(?false)|(?null)|""(?(?:\\.))""|(?-?(?:0|[1-9)(?:\.0-9]+)?(?:[eE?[0-9]+)?))| (?:)| (?\[)| (?,)| (?\])| (?{)| (?})| (?+)| (?[\r\n]+)| (?.+) Named Capture Groups | Group Name | Matches | |------------------|-------------------------------------------------------------------------| | comment | Single‑line //… or multi‑line /…/ comments (skipped). | | key | A JSON property key (double‑quoted string) followed by a colon (lookahead). | | value | A JSON value – one of: true, false, null, a double‑quoted string, or a number (integer, float, or scientific). | | bool | Sub‑group inside value for true/false (for direct parsing). | | null | Sub‑group for null. | | string | Sub‑group for the content inside double‑quotes (without the quotes). | | number | Sub‑group for numeric literals. | | value_sep | A colon : separating key and value. | | array_open | Left bracket [. | | array_sep | Comma , between array elements. | | array_close | Right bracket ]. | | object_open | Left brace {. | | object_close | Right brace }. | | whitespace | Horizontal whitespace (spaces, tabs) – not newlines. | | newline | Line‑break characters (CR, LF, CRLF). | | undefined | Any other character (should not occur in valid JSON; used as fallback). | Important Notes No recursion – the regex only tokenises; the parser handles nesting and depth limits. Escaped characters inside strings (\n, \t, \", etc.) are not unescaped by the regex – the parser calls UnEscape() when _allowEscapeChars is true. Whitespace and newlines are ignored by the parser (skipped during token iteration). The undefined group uses .+ (not .*) to avoid matching empty positions – this prevents false positives when the scanner reaches the end of the string. Purpose This regex is a solid foundation for building a custom JSON lexer, parser, or tokeniser for .NET projects. Its clear separation of structural elements, comments, and whitespace makes it easy to implement lightweight, hand‑crafted parsers that do not rely on heavy external libraries. It is particularly well‑suited for small to medium‑sized files, configuration blocks, or embedded data fragments, where performance and memory footprint matter. You can adapt the token stream to your own data model, add validation, or transform the JSON on the fly – all while keeping full control over the parsing logic.
Submitted by Pavel Bashkardin
1

ตรวจสอบพยัญชนะต้นตัวสะกดสระและวรรณยุกต์ไทย

Created·2026-01-22 01:36
Updated·2026-01-23 12:42
Type·Match
Flavor·JavaScript
ตรวจสอบพยัญชนะต้น (ต้องมี) ตรวจตัวสะกดสำหรับสระที่ต้องมี ตรวจสอบการวางสระและวรรณยุกต์ไทย หมายเหตุ การตรวจสอบตัวสะกดในภาษาไทยตรวจสอบได้ยากเพราะภาษาไทยเป็นภาษาที่เขียนติด ๆ กันไม่มีการแบ่งคำอย่างชัดเจนทำให้การอ่านภาษาไทยผู้อ่านต้องใช้ความหมายของคำในการตัดสินการอ่านแบ่งคำตามความเหมาะสมเช่นคำว่า "ตากลม" อาจอ่านเป็น "ตาก-ลม" ก็ได้ หรืออ่านเป็น "ตา-กลม"ก็ได้ ดังนั้นการเขียน Regex เพื่อทำการตรวจสอบอาจช่วยได้ระดับหนึ่ง อ่าจมีผิดบ้างถูกบ้าง แต่ก็ถือว่าเป็นเครื่องมือที่ใช้ช่วยเหลือในการตรวจสอบเพิ่มเติมได้ 80% ของความเป็นไปใด้ก็แล้วกันนะครับ หวังว่าการเขียนเพิ่มเติมส่วนนี้ จะมีประโยชน์บ้างไม่มากก็น้อย
Submitted by อธิปัตย์ ล้อวงศ์งาม

Community Library Entry

-2

Regular ExpressionOpen Workspace

/
\A\s* (?: ######################################################################### # Option A: [<Addition to address 1>] <House number> <Street name> # # [<Addition to address 2>] # ######################################################################### (?:(?P<A_Addition_to_address_1>.*?),\s*)? # Addition to address 1 (?:No\.\s*)? (?P<A_House_number_1>\pN+[a-zA-Z]?(?:\s*[-\/\pP]\s*\pN+[a-zA-Z]?)*) # Street name \s*,?\s* (?P<A_Street_name_1>(?:[a-zA-Z]\s*|\pN\pL{2,}\s\pL)\S[^,#]*?(?<!\s)) # House number \s*(?:(?:[,\/]|(?=\#))\s*(?!\s*No\.) (?P<A_Addition_to_address_2>(?!\s).*?))? # Addition to address 2 | ######################################################################### # Option B: [<Addition to address 1>] <Street name> <House number> # # [<Addition to address 2>] # ######################################################################### (?:(?P<B_Addition_to_address_1>.*?),\s*(?=.*[,\/]))? # Addition to address 1 (?!\s*No\.)(?P<B_Street_name>\S\s*\S(?:[^,#](?!\b\pN+\s))*?(?<!\s)) # House number \s*[\/,]?\s*(?:\sNo\.)?\s+ (?P<B_House_number>\pN+\s*-?[a-zA-Z]?(?:\s*[-\/\pP]?\s*\pN+(?:\s*[\-a-zA-Z])?)*|[IVXLCDM]+(?!.*\b\pN+\b))(?<!\s) # Street name \s*(?:(?:[,\/]|(?=\#)|\s)\s*(?!\s*No\.)\s* (?P<B_Addition_to_address_2>(?!\s).*?))? # Addition to address 2 ) \s*\Z
/
x

Description
Created·2015-04-01 11:05
Type·Match
Flavor·PCRE (Legacy)

This regular expression splits an address line like for example "1117 Franklin Blvd" into the street name and house number. It also supports addresses where street name and house number are the other way around (e.g. "Mustermannstr. 1"). Furthermore, this regular expression also supports address lines where additional information is given that is neither a street name nor a house number (e.g. "3940 Radio Road, Unit 110", "Pallaswiesenstr. 57 App. 235", "Suite 1500, 802 Docklands Street"). The regular expression has 8 capture groups in total. The first 4 capture groups get used when the house number precedes the street name. The names of these capture groups are prefixed with "A_". If the house number succeeds the street name, the last 4 capture groups are used. These are prefixed with "B_".

Submitted by Andre Wisplinghoff
Open Workspace