2017-01-31 3 views
-1

Мне нужна помощь в создании регулярного выражения, которое распознает токены в тексте.
лексем требования заключаются в следующем:Регулярное выражение с цифрами и некоторыми специальными символами

  • должна начинаться и заканчиваться $
  • может содержать любую комбинацию букв, цифр, _
  • может содержать только один последовательный ., что означает:
    • $some.valid.sample$ действителен
    • $some..invalid.sample$ не
  • могут содержать квадратные скобки, но только если они содержат ряд внутри, а это означает:
    • $some.valid[0].sampl$ действует
    • $some.invalid[].sample$ не
  • содержит от 1 до 64 символов

дополнительные требования (после обсуждения в комментариях):

  • квадратные скобки с номером должны сопровождаться ., если они не находятся на конце (т. если они не только перед закрытием $)
  • ограничение длины относится к содержанию между двумя $

Может кто-нибудь помочь мне с этим?
До сих пор я \$([A-Za-z0-9._]*(\[\d+\])*)+]$

+2

Try [ '\ $ (?: [A-Za-z0-9_ ] | \ [\ d + \]) + (: \ (?.? [A-Za-z0-9_] | \ [\ d + \]) +) * \ $ '] (https://regex101.com/r/BAniMi/1) –

+0

Я думаю 'Regex.Matches (s, @" \ $ (?: \ w | \ [\ d +]) + (?: \. (?: \ w | \ [\ d +]) +) * \ $ ", RegexOptions.ECMAScript)' будет то, что вам нужно (если вы хотите только совместить буквы и цифры ASCII). –

+0

Должны ли квадратные скобки появляться в конце каждого сегмента или '$ ab [0] cd $' также действительны? –

ответ

3

на основе обновленных правил от комментариев, это то, что вам нужно:

\$(?=[^\$]{1,64}\$)\w+(?:\[\d+\])?(?:\.\w+(?:\[\d+\])?)*\$ 
+0

Это именно то, что мне нужно, спасибо, сэр! – Przemo

1

Как об этой модели:

\$\w+?.?\w*?(\[\d+\]?)?.?\w*?\$ 

Вы можете test it here

это немного слишком узок, хотя. Я хотел бы принять предложение по @Wiktor Stribizew

Смежные вопросы