Существует ли простой RegEx для строки WITH или БЕЗ окружающего CHAR? - PullRequest
1 голос
/ 11 июня 2019

Я пытаюсь понять, как улучшить мой текущий RegEx.Прямо сейчас я использую что-то вроде #?string#?, чтобы соответствовать строке, окруженной # или нет.К сожалению, это соответствует всем 4 вариантам, где я хочу, чтобы оно совпадало только с 2:

#string# : matched
#string  : matched – but I don't want it to
 string# : matched – but I don't want it to
 string  : matched

Как я могу сделать закрытие # в зависимости от наличия открытия #?

Я знаю, что могу пойти на (#string#|string), но мой string является довольно сложным RegEx, содержащим несколько групп (), и я хочу избежать проверки того, какая из инкапсулированных групп соответствует в зависимости от строки с илибез # корпуса.

Ответы [ 2 ]

4 голосов
/ 11 июня 2019

Пожалуйста, попробуйте этот шаблон.Сначала захватите либо #, либо space, затем используйте его в конце в качестве обратной ссылки

([# ])string\1
0 голосов
/ 11 июня 2019

Основываясь на ответе @ minhazur, вы можете выполнить следующие действия для поиска окружающих групп:

((#)|(@))string\1

это распознает #string# и @string@, однако это не будет работать для определения, есть линет соответствующего символа ... (т. е. string)

Это будет записано примерно так:

((#)|(?!#))string\1

Но это все равно будет соответствовать #string и string#.

РЕДАКТИРОВАТЬ

На самом деле, ((#)|(?!#))string\1 будет соответствовать правильной вещи (совпадающая строка между []):

#string# --> Matches [#string#]
string   --> Matches [string]
#string  --> Matches #[string]
string#  --> Matches [string]#

Взгляните на FreeFormatter , чтобы проверить ваши регулярные выражения.

...