Я просто пытаюсь получить выражение Regex, которое будет соответствовать значениям ниже:
{{word1}}_{{word2}}_{{word3}} // MATCH
_{{word1}}_{{word2}}_{{word3}}. // NO MATCH
{{word1}}_word{{word2}}_{{word3}} // NO MATCH
{{word1}}_{{word2}}_{{word3}}word4 // NO MATCH
{{word1}}_{{word2}}_{{word3}}_ // NO MATCH
_{{word1}}_{{word2}}_{{word3}}_ // NO MATCH
{{word1}}_{{word2))_{{word3}} // NO MATCH
+{{word1}}-{{word2}}_{{word3} // NO MATCH
Таким образом, в основном шаблон представляет собой две фигурные скобки ({{ и }}), заключающие в себе какое-то слово (\w+), разделенные или разделенные символом подчеркивания (_). Не должно быть никаких символов перед началом строки или в конце.
Проблема, с которой я столкнулся, связана с моим регулярным выражением, оно будет соответствовать значениям, которые существуют вне строки, например, это то, что я сейчас использовал:
\b({{\w+}})(\b_\b)*
Таким образом, это будут строки, которые являются word{{word}}_{{word2}}_
, и сделают их действительными.
Могут ли быть другие символы до или после выражения в той же строке? Другими словами, вы ожидаете, что сможете найти совпадение в пределах "word1 {{word2}}_{{word3}}_{{word4}} word5"
?
^{{\w+}}(?:_{{\w+}})*$
ОБЪЯСНЕНИЕ
^ asserts position at start of a line
{{ matches the characters {{ literally (case sensitive)
\w matches any word character (equivalent to [a-zA-Z0-9_])
+ matches the previous token between one and unlimited times, as many times as possible, giving back as needed (greedy)
}} matches the characters }} literally (case sensitive)
Non-capturing group (?:_{{\w+}})*
* matches the previous token between zero and unlimited times, as many times as possible, giving back as needed (greedy)
_{{ matches the characters _{{ literally (case sensitive)
\w matches any word character (equivalent to [a-zA-Z0-9_])
+ matches the previous token between one and unlimited times, as many times as possible, giving back as needed (greedy)
}} matches the characters }} literally (case sensitive)
$ asserts position at the end of a line
https://regex101.com/r/UJ0GdY/2
Я обновил регулярное выражение, чтобы избежать извлечения групп.
спасибо @earandap. Я думаю, что я тупой, я не мог придумать решение весь день. это выглядит великолепно, большое спасибо
Это должно быть ровно три слова?