2011-07-03 4 views
1

두 개의 다른 태그에 대한 문자열을 구문 분석하고 각각을 데이터베이스에 저장하고 싶습니다. 이 tag1과 tag2를 호출 해 봅시다. 나는 delimeter를 가지고 있는데, "? #"는 tag1과 tag2 사이의 분리입니다.Ruby에서 문자열을 파싱 한 다음 데이터베이스에 저장

한다고 가정

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" 

, 그래서 정말 감사 당신의 이것에 대한 도움!

이 먼저의가 tag?#tag2있는 텍스트의 흥미로운 부분을 캡처 할 수

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

설명 :

답변

3

당신은 분할과 결합 된 정규 표현식을 사용할 수 있습니다. 우리는 대한 정규식을 사용합니다 :

/\S+\?#\S+/ 

설명 :

\S+은 구분 기호를 앞의 공백이 아닌 문자 (태그)

\?#

\S+ 모든 캡처 토큰 구분 기호를 캡처를 캡처 후행 공백이 아닌 문자 (tag2)

그 정규식 (whi 우리가 [0]에 액세스 채널이다

firsttag?#secondtag

다음에서 우리가 구분 기호를 사용하여 분할 우리는 태그와 배열을 얻을.

건배!

추신 : 나는 ruby-on-rails과 관련이 없으므로 게시물의 태그를 다시 지정했습니다. 그냥 평범한 루비 야.

+0

고마워요. 파블로, 내가 도움이되는 정규식 워크 스루를 발견했습니다! – s2t2

+0

괜찮습니다! 건배 –

+0

후속 질문 : 데이터베이스에 파싱 된 스 니펫을 어떻게 저장할 수 있습니까? 구체적으로 말하자면 트위터 보석을 사용하여 데이터베이스에 트윗을 다시 저장하고 저장합니다.위에 설명 된 방식으로 트윗을 파싱하고 스 니펫을 인스턴스로 생성하여 내가 만든 관련 객체 클래스에 저장할 수 있기를 원합니다. 어떤 아이디어? – s2t2

관련 문제