2016-06-17 2 views
1

Как проверить на [ в начале и ] в конце строки, используя регулярное выражение?Как проверить на [] в начале и конце строки

Я пытаюсь проверить, может ли строка использоваться JSON.parse.

/\A[\w\z]/ это то, что я придумал, но похоже, что он не работает.

+0

Вы можете использовать '/ \ A \ [. * \] \ Г/M' чтобы проверить, начинается ли какая-либо строка с '[' и заканчивается символом ']'. –

+0

@ WiktorStribiżew спасибо, что это работает! добавьте ответ, чтобы я мог его принять. –

+1

Если ваша настоящая цель - проверить правильный формат JSON, это проблема XY. Вы должны разбирать его как JSON, завернутый в блок спасения, и посмотреть, обнаруживает ли он какие-либо ошибки анализа JSON. – sawa

ответ

4

Там нет необходимости в регулярном выражении, используйте start_with и end_with:

s = "[text\nhere]" 
puts s.start_with?("[") and s.end_with?("]") 
# => true 

См. Ruby demo

Если вам нужно регулярное выражение, вы можете использовать

/\A\[.*\]\z/m 

, чтобы проверить, начинается ли какая-либо нить с [ и заканчивается ].

Объяснение:

  • \A - начало строки
  • \[ - буквальных [
  • .* - 0+ любые символы, даже вкл. новая строка из-за модификатором /m)
  • \] - закрытие ]
  • \z - самый конец строки.

См regex demo

+0

Обратите внимание, что ваш шаблон '\ A [\ w \ z]' соответствует началу строки, а затем 1 символ: либо слово char (буква/цифра/_), либо 'z' (поскольку' \ z' является неоднозначным как 'z', поскольку этот' \ z' не рассматривается как якорь внутри класса символов). –

+0

Регулярное выражение должно содержать только 2 разделителя регулярных выражений, поэтому оно должно быть 'if self.text = ~ /\A\[.*\]\z/m {}' –

+0

Используйте методы над регулярным выражением. Методы быстрее и четко показывают, что вы пытаетесь сделать. –

-2

Поскольку квадратные скобки [] используются для создания регулярного списка выражений, вы должны избавиться от них:

/\A\[.*\]\z/ 
+0

Спасибо! '\ w' будет принимать любое количество символов между' [] 'right? –

+0

@Nomad: Нет, не будет. Это неправильное регулярное выражение. –

+0

Я думал, что вы уверены в том, чего хотите. Я изменил его, чтобы искать строки, которые начинаются и заканчиваются квадратными скобками независимо от того, что находится между ними. –

1

Если вы хотите, чтобы проверить в начале и в конце концов, почему бы не

string = "[foo..bar]" 
str = string.strip 
str[0] == "[" && str[-1] == "]" 
Смежные вопросы