Соответствие [STRING] между блоком Param (...) - PullRequest
0 голосов
/ 11 октября 2018

Если вы посмотрите на приведенный ниже фрагмент кода, я пытаюсь сопоставить все [STRING], которые находятся внутри блока Param ( ... ) ТОЛЬКО .

Я был на этомкакое-то время, и я просто не могу понять, как это сделать.Я пытался использовать lookaheads, lookbehind, рекурсию и ссылки на группы захвата.

То, что у меня сейчас есть: (?<=Param\(\s*\1|)(\[\w*\])

Код:

Param(
    [STRING]$CustomerName,
    [STRING]$ClusterName,
)

[STRING]$CustomerName,
[STRING]$ClusterName,

Чего я хочу достичьс регулярным выражением соответствует всем [STRING], если первое [STRING] также соответствует Param (.А затем продолжайте сопоставление до тех пор, пока не будет найдена закрывающая скобка ).

Regex101 Демонстрация: https://regex101.com/r/hVeb8R/1

Я использую там javascript, поскольку он, похоже, близко соответствует ожидаемой функциональности для C #.

1 Ответ

0 голосов
/ 11 октября 2018

.NET поддерживает бесконечное количество повторений во взглядах.Способность, которая не очень часто встречается в мире двигателей RegEx.Вызывая эту функцию, вы можете достичь желаемого результата, используя:

(?<=Param\([^()]*)\[\w+]

Шаблон в lookbehind гарантирует, что, не выходя за скобки, должно быть найдено совпадение на Param(.[^()] означает никогда не совпадать с круглыми скобками при поиске Param(.Это почти все, но если вы хотите сделать еще одну проверку на [STRING], за которой следует закрывающая скобка, вы должны добавить положительный прогноз, например, так:

(?<=Param\([^()]*)\[\w+](?=[^()]*\))

Используя Chrome, см. live demo здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...