{"id":46349986,"url":"https://github.com/aim2bpg/hoozmo","last_synced_at":"2026-03-04T22:33:14.324Z","repository":{"id":330171330,"uuid":"1121130607","full_name":"aim2bpg/hoozmo","owner":"aim2bpg","description":"Hoozmo is a hobby regex engine written in Ruby, created while learning from Hoozuki.","archived":false,"fork":false,"pushed_at":"2026-02-07T16:01:51.000Z","size":58,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-08T00:15:24.740Z","etag":null,"topics":["github-pages","regex-engine","ruby","wasm","webassembly"],"latest_commit_sha":null,"homepage":"https://aim2bpg.github.io/hoozmo/","language":"Ruby","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/aim2bpg.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,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-22T13:39:49.000Z","updated_at":"2026-02-07T16:01:54.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/aim2bpg/hoozmo","commit_stats":null,"previous_names":["aim2bpg/hoozmo"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/aim2bpg/hoozmo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aim2bpg%2Fhoozmo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aim2bpg%2Fhoozmo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aim2bpg%2Fhoozmo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aim2bpg%2Fhoozmo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aim2bpg","download_url":"https://codeload.github.com/aim2bpg/hoozmo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aim2bpg%2Fhoozmo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30096816,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-04T21:59:23.547Z","status":"ssl_error","status_checked_at":"2026-03-04T21:57:50.415Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["github-pages","regex-engine","ruby","wasm","webassembly"],"created_at":"2026-03-04T22:33:14.217Z","updated_at":"2026-03-04T22:33:14.311Z","avatar_url":"https://github.com/aim2bpg.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Hoozmo (Hoozuki-mod)\n\n[![CI](https://github.com/aim2bpg/hoozmo/actions/workflows/ci.yml/badge.svg)](https://github.com/aim2bpg/hoozmo/actions/workflows/ci.yml) [![Pages](https://github.com/aim2bpg/hoozmo/actions/workflows/pages/pages-build-deployment/badge.svg)](https://github.com/aim2bpg/hoozmo/actions/workflows/pages/pages-build-deployment)\n\nHoozmo is a hobby regex engine written in Ruby, created while learning from [Hoozuki](https://github.com/ydah/hoozuki).\n\n## Quick start\n\nInstall dependencies:\n\n```bash\nnpm install\nbundle install\n```\n\nRun tests:\n\n```bash\nbundle exec rspec\n```\n\nBuild production assets:\n\n```bash\nnpm run build\n# output -\u003e dist/\n```\n\nRun the frontend dev server:\n\n```bash\nnpm run dev\n# open http://localhost:3000\n```\n\n## Supported features\n\nHoozmo provides a minimal, educational regular-expression engine suitable for learning and experimentation. The parser and matcher in `lib/` (and the browser demo) support the core constructs below.\n\n- **Literals**: match single characters exactly (examples: `a`, `b`, `1`).\n- **Concatenation**: adjacent tokens are matched in sequence (example: `abc` matches `abc`).\n- **Grouping**: parentheses `()` create groups for sequencing or alternation (example: `a(bc)d`).\n- **Alternation / Choice**: the `|` operator selects between alternatives (examples: `a|b`, `a|b|c`).\n- **Nested groups**: groups may be nested to express more complex structure (example: `a((b|c)|d)e`).\n- **Kleene closure / Repetition**: `*` matches the preceding element zero or more times (example: `a*`).\n- **One or more**: `+` matches the preceding element one or more times (example: `a+`).\n- **Optional**: `?` makes the preceding element optional (zero or one) (example: `a?`).\n- **Escape sequences**: special characters can be escaped with backslash `\\` (examples: `\\*`, `\\(`, `\\)`, `\\|`, `\\\\`).\n- **Substring matching**: patterns match anywhere in the input string (like most regex engines).\n\nNotes:\n- This project focuses on clarity and pedagogical value rather than full PCRE compatibility.\n- To add features, update the parser in `lib/hoozmo/parser.rb` and add tests under `spec/`.\n\nExamples (these are also available in the browser demo):\n\n- `abc` — literal concatenation, matches exactly `abc`.\n- `a|b` — alternation, matches `a` or `b`.\n- `a|b|c` — multiple alternatives.\n- `a(b|c)d` — grouping with alternation (e.g. matches `acd`).\n- `a((b|c)|d)e` — nested grouping with alternation (e.g. matches `ade`).\n- `a*` — Matches zero or more (e.g. `a*`).\n- `a+` — Matches one or more (e.g. `a+`).\n- `a?` — Optional (zero or one, e.g. `a?`).\n- `a+b*c?` — Combined quantifiers example.\n- `a\\*b` — Escaped asterisk (matches literal `a*b`).\n- `cat` — Substring matching (finds `cat` anywhere in the input).\n \n### Browser demo examples (pattern + test string)\n\n- Pattern: `abc` — Test string: `abc`\n- Pattern: `a|b` — Test string: `b`\n- Pattern: `a|b|c` — Test string: `c`\n- Pattern: `a(b|c)d` — Test string: `acd`\n- Pattern: `a((b|c)|d)e` — Test string: `ade`\n- Pattern: `a*` — Test string: `aaa`\n- Pattern: `a+` — Test string: `aaa`\n- Pattern: `a?` — Test string: `a`\n- Pattern: `a+b*c?` — Test string: `aabbc`\n- Pattern: `a\\*b` — Test string: `a*b` (escaped asterisk)\n- Pattern: `cat` — Test string: `concatenate` (substring match)\n\nBrowser demo: open the project in a browser (or run the dev server with `npm run dev`) and open `index.html` — the Examples panel on the page inserts the pattern and test string into the fields when clicked.\n\nIf you want to extend the parser with additional features, add tests under `spec/` and update `lib/hoozmo/parser.rb` and `lib/hoozmo.rb` accordingly.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faim2bpg%2Fhoozmo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faim2bpg%2Fhoozmo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faim2bpg%2Fhoozmo/lists"}