{"id":16481213,"url":"https://github.com/dfinke/psstringscanner","last_synced_at":"2025-03-21T07:30:35.416Z","repository":{"id":66743364,"uuid":"177479300","full_name":"dfinke/PSStringScanner","owner":"dfinke","description":"Provides lexical scanning operations on a String","archived":false,"fork":false,"pushed_at":"2019-06-29T22:39:05.000Z","size":674,"stargazers_count":50,"open_issues_count":0,"forks_count":7,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-17T22:25:16.263Z","etag":null,"topics":["parser","parsing","powershell","scanner","string"],"latest_commit_sha":null,"homepage":null,"language":"PowerShell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dfinke.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2019-03-24T22:54:40.000Z","updated_at":"2024-12-14T17:39:29.000Z","dependencies_parsed_at":"2023-06-06T12:40:47.075Z","dependency_job_id":null,"html_url":"https://github.com/dfinke/PSStringScanner","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfinke%2FPSStringScanner","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfinke%2FPSStringScanner/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfinke%2FPSStringScanner/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dfinke%2FPSStringScanner/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dfinke","download_url":"https://codeload.github.com/dfinke/PSStringScanner/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244757139,"owners_count":20505339,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["parser","parsing","powershell","scanner","string"],"created_at":"2024-10-11T13:06:45.233Z","updated_at":"2025-03-21T07:30:35.086Z","avatar_url":"https://github.com/dfinke.png","language":"PowerShell","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n\u003ca href=\"https://dougfinke.visualstudio.com/PSStringScanner/_build?definitionId=17\"\u003e\u003cimg src=\"https://dougfinke.visualstudio.com/PSStringScanner/_apis/build/status/PSStringScanner-CI?branchName=master\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"./LICENSE\"\u003e\u003cimg\nsrc=\"https://img.shields.io/badge/License-MIT-blue.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://www.powershellgallery.com/packages/PSStringScanner\"\u003e\u003cimg\nsrc=\"https://img.shields.io/powershellgallery/dt/PSStringScanner.svg\"\u003e\u003c/a\u003e\n\u003ca href=\"https://www.powershellgallery.com/packages/PSStringScanner\"\u003e\u003cimg\nsrc=\"https://img.shields.io/powershellgallery/v/PSStringScanner.svg\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n# PowerShell String Scanner\nProvides lexical scanning operations on a String.\n\nPorted from https://github.com/ruby/strscan\n\n# Parsing a Config File\n\n\u003cimg src=\"https://raw.githubusercontent.com/dfinke/PSStringScanner/master/images/ParseConfig.png\"\u003e\n\n# Usage\n\n```powershell\n$scanner = New-PSStringScanner 'This is an example string'\n\n$scanner.EoS()               # -\u003e False\n$scanner.Scan(\"\\w+\")         # 'This'\n$scanner.Scan(\"\\s+\")         # ' '\n$scanner.Scan(\"\\w+\")         # 'is'\n$scanner.EoS()               # -\u003e False\n$scanner.Scan(\"\\s+\")         # ' '\n$scanner.Scan(\"\\w+\")         # 'an'\n$scanner.Scan(\"\\s+\")         # ' '\n$scanner.Scan(\"\\w+\")         # 'example'\n$scanner.Scan(\"\\s+\")         # ' '\n$scanner.Scan(\"\\w+\")         # 'string'\n$scanner.EoS()               # -\u003e True\n```\n\n# More Uses\nTwo approaches, same results.\n\n## Using Scan, Check and Skip\n```powershell\n$scanner = New-PSStringScanner 'Eggs, cheese, onion, potato, peas'\n\n$actualItems = @()\nwhile ($true) {\n    $actualItems += $scanner.scan(\"\\w+\")\n    if ($scanner.Check(',')) {\n        $scanner.Skip(',\\s*')\n    }\n    else {\n        break\n    }\n}\n```\n\n## Using Do {} Until\n\n```powershell\n$scanner = New-PSStringScanner 'Eggs, cheese, onion, potato, peas'\n\n$actualItems = do {$scanner.scan(\"\\w+\")} until ($scanner.EoS())\n```\n\n# ScanUntil\n\nScans the string until the pattern is matched. Returns the substring up to and including the end of the match, advancing the scan pointer to that location. If there is no match, null is returned.\n\n```powershell\n$scanner = New-PSStringScanner 'Fri Dec 12 1975 14:39'\n\n$scanner.ScanUntil(\"1\")   # \"Fri Dec 1\"\n$scanner.ScanUntil(\"YYZ\") # $null\n```\n\n# CheckUntil\n\nThis returns the value that ScanUntil would return, without advancing the scan pointer. The match register is affected, though.\n\n```powershell\n$scanner = New-PSStringScanner 'Fri Dec 12 1975 14:39'\n\n$scanner.CheckUntil(\"12\")   # \"Fri Dec 12\"\n$scanner.pos                # 0\n```\n\n# SkipUntil\nAdvances the scan pointer until pattern is matched and consumed. Returns the number of bytes advanced, or null if no match was found.\n\nLook ahead to match pattern, and advance the scan pointer to the end of the match. Return the number of characters advanced, or null if the match was unsuccessful.\n\nIt's similar to ScanUntil, but without returning the intervening string.\n\n```powershell\n$scanner = New-PSStringScanner 'Fri Dec 12 1975 14:39'\n\n$scanner.SkipUntil(\"12\")   # 10\n$scanner\n# s                     pos\n# -                     ---\n# Fri Dec 12 1975 14:39  10\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdfinke%2Fpsstringscanner","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdfinke%2Fpsstringscanner","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdfinke%2Fpsstringscanner/lists"}