Использование <string>.split (и регулярное выражение) для проверки внутренних кавычек - PullRequest
2 голосов
/ 23 июля 2010

Я выполняю поиск на моем веб-сайте и хотел бы поддержать поиск точных фраз. Я хочу закончить с массивом терминов для поиска; Вот несколько примеров:

"foobar \"your mom\" bar foo" => ["foobar", "your mom", "bar", "foo"]

"ruby rails'test course''test lesson'asdf" => ["ruby", "rails", "test course", "test lesson", "asdf"]

Обратите внимание, что не обязательно должен быть пробел до или после кавычек.

Я не очень хорошо разбираюсь в регулярных выражениях, и, кажется, нет необходимости пытаться разбить его несколько раз на отдельные символы. Кто-нибудь может мне помочь? Спасибо.

1 Ответ

2 голосов
/ 23 июля 2010

Вы хотите использовать это регулярное выражение ( см. На rubular.com ):

/"[^"]*"|'[^']*'|[^"'\s]+/

Это регулярное выражение соответствует токенам вместо разделителей, поэтому вы хотите использоватьscan вместо split.

Конструкция […] называется классом символов.[^"] означает «что угодно, кроме двойной кавычки».

По сути, есть 3 альтернативы:

  • "[^"]*" - токен с двойными кавычками (может включать пробелы и одинарные кавычки)
  • '[^']*' - токен с одинарными кавычками (может содержать пробелы и двойные кавычки)
  • [^"'\s]+ - токен, состоящий из одного или нескольких элементов, кроме кавычек и пробелов

Ссылки


Фрагмент

Вот реализация Ruby:

s = %_foobar "your mom"bar'test course''test lesson'asdf_
puts s

puts s.scan(/"[^"]*"|'[^']*'|[^"'\s]+/)

Вышеуказанные отпечатки ( как видно на ideone.com ):

foobar "your mom"bar'test course''test lesson'asdf
foobar
"your mom"
bar
'test course'
'test lesson'
asdf

См. Также

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