2012-05-02 4 views
3

ruby ​​on rails 앱에서 정규 표현식을 사용하여 주어진 문자열을 검색하고 대괄호를 열고 닫는 모든 인스턴스를 찾으려고합니다 (예 : [및]). 두 가지 사이의 내용을 선택하십시오. 예를 들어루비에서 정규 표현식을 사용하여 특정 문자 찾기

:이 문자열에서

Lorem ipsum [dolor sit] amet... 

이 결과는 다음과 같습니다 [dolor sit]

나는 Rubular 나 비트와 함께 놀았이 더 많거나 적은 내가 원하는 것을 발견

/\[.*?\]/ 

제 질문은 대괄호 자체를 선택하지 않고 두 대괄호 안에있는 모든 것을 어떻게 일치 시키나요? 또한 루비 스크립트에 실제로 어떻게 통합합니까?

정규 표현식은 그래서 너희들이 제공 할 수있는 어떤 도움이 많이 주시면 감사하겠습니다 나를 위해 완전히 새로운 땅 : 당신은 추출 할 입력의 일부에 해당하는 정규 표현식의 부분을 래핑 할 수

+0

무엇을 찾으시겠습니까? 일치 항목은 무엇입니까?'Lorem ipsum [do [lor [si [t] amet]' – sln

+0

정규 표현식을 처음 접했을 때'/\[(.*)\]/'는 주어진 샘플에 대해 정확히 원하는 것을 수행합니다. , 그러나 어떤 식 으로든 그것은'/\[(.*?)\]/'과 동일하지 않습니다. – sln

+0

@sln 오 오케이 좋아, 그 차이점을 설명해 줄 수 있니? – gregchapple

답변

4

당신은 String#scan를 사용할 필요가 String#scan

>> s="Lorem ipsum [dolor sit] [amet] ..." 
=> "Lorem ipsum [dolor sit] [amet] ..." 
>> s.scan(/\[([^\]]*)\]/).flatten 
=> ["dolor sit", "amet"] 
+0

그게 정확히 내가 원하는 걸, 고마워! – gregchapple

1

있습니다 () 내부 : 당신은 또한 글로벌 변수를 통해 일치의 결과에 액세스 할 수 있습니다

str = "Lorem ipsum [dolor sit] amet....".match(/\[(.*?)\]/) 
# str --> #<MatchData "[dolor sit]" 1:"dolor sit"> 
str[1] # Will give you 'dolor sit' 

참고 : (i가 일치하는 단어의 인덱스를 나타냅니다 $i 일반적으로) $1. regexp와 여러 캡처를 수집

+0

[]의 인스턴스를 두 개 이상 일치 시키려고하면 작동하지 않습니다. 모든 인스턴스와 일치 시키려면 어떻게해야합니까? – gregchapple

+0

@gregchapple 당신은 다음과 같이 의미합니다 : "Lorem ipsum [dolor sit] [amet] ..."? 'dolor sit'과 'amet'을 추출 하시겠습니까? 정확히 –

+0

예! 그게 가능하니? – gregchapple

2

위한 작업입니다 :

"Hi [there] how are [you]?".scan(/\[.*?\]/) 
=> ["[there]", "[you]"] 

이 방법은 모든 경기를 반환, 전체 문자열을 반복 할.

관련 문제