https://github.com/simplestatemachine/simplestatemachine.structuralsearch
https://github.com/simplestatemachine/simplestatemachine.structuralsearch
Last synced: 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/simplestatemachine/simplestatemachine.structuralsearch
- Owner: SimpleStateMachine
- License: mit
- Created: 2021-10-20T19:43:27.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2025-03-30T21:48:09.000Z (3 months ago)
- Last Synced: 2025-04-15T05:47:00.462Z (2 months ago)
- Language: C#
- Size: 522 KB
- Stars: 1
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[](https://www.nuget.org/packages/SimpleStateMachine.StructuralSearch) [](https://github.com/SimpleStateMachine/SimpleStateMachine.StructuralSearch) [](https://www.nuget.org/packages/SimpleStateMachine.StructuralSearch) [](https://github.com/SimpleStateMachine/SimpleStateMachine.StructuralSearch) [](https://github.com/SimpleStateMachine/SimpleStateMachine.StructuralSearch)
[](https://github.com/SimpleStateMachine/SimpleStateMachine.StructuralSearch) [](https://t.me/joinchat/HMLJFkv9do6aDV188rhd0w)
# SimpleStateMachine.StructuralSearchStructuralSearch - An easy-to-use library for structural search and replace in text in any programming language.
## Give a Star! :star:
If you like or are using this project please give it a star. Thanks!# Why SimpleStateMachine?
**Forget** about regular expressions and **enjoy searching*1. Describe search pattern🔎
```C#
// Just text and placeholders
var template = StructuralSearch.ParseFindTemplate("void $methodName$($params$)")
```
2. Find it in any textđź“„
```C#
// All the matches are already here
var results = template.ParseString("void MyMethodName(int value1, double value2)"
```
3. Enjoy the search resultsđź“‘
```C#
// The found text part
parseResult.Match.Value // void MyMethodName(int value1, double value2)// The exact coordinates of the match
parseResult.Match.Column // Start 1, End 45
parseResult.Match.Line // Start 1, End 1
parseResult.Match.Offset // Start 0, End 44
// Placeholders
parseResult.Placeholders // { "methodName" : "MyMethodName" }, { "params": "int value1, double value2" }
// The exact coordinates of each placeceholdder
parseResult.Placeholders[0].Column // Start 6, End 18
parseResult.Placeholders[0].Line // Start 1, End 1
parseResult.Placeholders[0].Offset // Start 5, End 17```
# Grammar
```ebnf
logic_expr =
binary_operation
| not_operation
| string_comparison_operation
| type_check_operation
| match_operation
| in_operation
| '(' logic_expr ')'binary_operation = logic_expr ('And' | 'Or' | 'NAND' | 'NOR' | 'XOR' | 'XNOR') logic_expr
string_comparison_operation = string_expr ('Equals' | 'Contains' | 'StartsWith' | 'EndsWith') string_expr
not_operation = 'Not' logic_expr
type_check_operation = string_expr 'Is' ('Var' | 'Int' | 'Double' | 'DateTime' | 'Guid')
match_operation = string_expr 'Match' '"' '"'
in_operation = string_expr 'In' [ '(' ] string_expr { ',' string_expr } [ ')' ]string_expr =
grouped_string
| property_access
| atomic_tokengrouped_string =
'(' string_expr ')'
| '{' string_expr '}'
| '[' string_expr ']'property_access =
placeholder '.' (
'Length'
| complex_property
| input_property [ chainable_string ]
)
| placeholder [ chainable_string ]chainable_string = { '.' ('Trim' | 'TrimEnd' | 'TrimStart' | 'ToUpper' | 'ToLower') }
input_property = 'Input.' identifier
complex_property = ('Offset' | 'Line' | 'Column') '.' ('Start' | 'End')atomic_token = placeholder | string_literal | whitespace | comment
placeholder = '$' identifier '$'
string_literal =
whitespace = (' ' | '\n' | '\r')+
comment =
```## Getting Startedđź“‚
Install from Nuget:
```sh
Install-Package SimpleStateMachine.StructuralSearch
```## Documentationđź“„
Documentation here: [wiki](https://github.com/SimpleStateMachine/SimpleStateMachine.StructuralSearch/wiki)## FAQâť”
If you think you have found a bug, create a github [issue](https://github.com/SimpleStateMachine/SimpleStateMachine.StructuralSearch/issues).But if you just have questions about how to use:
- [Telegram channel](https://t.me/joinchat/HMLJFkv9do6aDV188rhd0w)
## Licenseđź“‘
Copyright (c) SimpleStateMachine
Licensed under the [MIT](LICENSE) license.