Разбор строки в Ruby и сохранение в базу данных - PullRequest
1 голос
/ 03 июля 2011

Я хотел бы проанализировать строку для двух разных тегов, а затем сохранить каждый в базе данных. Давайте назовем эти tag1 и tag2. У меня есть своего рода разделитель "? #", Который разделен между tag1 и tag2.

Предположим,

t = "random text blah firsttag?#secondtag more blah"

Цель: tag1 должен быть "firsttag", а tag2 должен быть "secondtag" без предшествующего или конечного случайного текста. Каждый должен храниться как объект в базе данных.

Я пробовал что-то вроде:

t.split

но возвращается

["random text blah firsttag", "secondtag more blah"]

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

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

m = "random firsttag#?secondtag blah blah 1sttag#?2ndtag blah blah blah"

Я довольно плохо знаком с рубином и рельсами, поэтому я очень ценю вашу помощь в этом!

1 Ответ

3 голосов
/ 03 июля 2011

Вы можете использовать регулярное выражение в сочетании с split:

tags = t.match(/\S+\?#\S+/)[0].split('?#')

Пояснение

Сначала давайте захватим интересную часть текста, которая является tag?#tag2,Для этого мы будем использовать регулярное выражение:

/\S+\?#\S+/

Объяснение:

\S+ захватывает непробельные символы, предшествующие разделителю (тегу)

\?# захватываеттокен-разделитель

\S+ захватывает все конечные непробельные символы (tag2)

Соответствие этому регулярному выражению (к которому мы обращаемся [0]:

firsttag?#secondtag

Затем из этого мы просто разделяем, используя разделитель, и получаем массив с тегами.

Cheers!

PS: я повторно пометил сообщение, так как ононе имеет ничего общего с ruby-on-rails. Это просто рубин

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