정규식의 약어인 RegEx에 대해 들어보셨을 것입니다. 위협적으로 느껴질 수도 있지만, 패턴의 의미와 실제 표현을 구성하고 사용하는 방법에 익숙해지면 그리 나쁘지 않습니다. 좀 더 추상적인 방식으로 문자열과 텍스트를 생각하는 데 익숙해지면 데이터 세트에서 공통 패턴을 찾는 문제를 해결하는 데 유용한 도구가 될 수 있습니다.
RegEx는 패턴 일치 방법입니다. 패턴을 기반으로 문자열이나 텍스트를 필터링하는 방법으로, 일반적으로 원하는 텍스트를 추출하고 수정합니다. 이 기사에서는 정규식을 사용하는 방법과 Ruby 메서드를 사용하여 해당 표현식을 테스트하여 프로젝트 논리에 통합하는 방법에 대해 설명합니다.
RegEx를 시각화하고 이해하는 데 매우 유용한 도구 중 하나는 Rubular라는 사이트입니다. 이미 채워진 텍스트 블록을 사용하여 RegEx를 테스트하려면 여기 링크를 클릭하세요. 두 개의 슬래시 사이에 'neighbor'라는 단어가 포함된 문자열이 있음을 알 수 있습니다.
믿거나 말거나, 이것은 정규 표현식입니다! 전체 단어, 문장, 단락은 기술적으로 정규식이라고 부를 수도 있습니다(두 개의 슬래시 사이에 있는 한). Rubular 환경은 텍스트 블록에서 '이웃' 패턴의 모든 단일 인스턴스를 강조 표시합니다. 심지어 이웃이 더 큰 단어의 일부인 경우에도 마찬가지입니다! 즉, 정확한 단어 일치보다 더 추상적인 것을 찾고 싶을 수도 있습니다. 여기서 메타문자가 필요합니다.
메타문자
RegEx를 사용하는 것은 숙련된 프로그래머에게 어려울 수 있으므로 낙심하지 마십시오.
원자가 우리 주변에서 볼 수 있는 거의 모든 것의 구성 요소인 것처럼, 메타 문자는 정규식의 구성 요소입니다. 정규식을 추가하면 전체 패턴이 변경됩니다. 그리고 전반적인 패턴이 바뀌면, 사용하는 방법에서 얻는 결과도 달라질 수 있습니다.
아래에는 자신에게 맞는 패턴을 찾을 수 있도록 정규식을 수정하는 여러 가지 방법이 나열되어 있습니다. 절대적으로 맞는 사람은 없습니다 전화번호나 이메일 등에 대한 정규식을 작성하는 방법 – 프로젝트에 필요한 것이 무엇인지에 관한 모든 것입니다.
MetacharacterMatchesExample[abc]a, b 또는 c일 수 있는 문자열의 단일 문자와 일치하는 문자 클래스/[eig]/는 neighbor, apple 또는 Gate의 일부와 일치할 수 있습니다.[^abc] 문자열의 모든 단일 문자와 일치하는 부정 문자 클래스 그러나 a, b 또는 c/[^eig]/는 neighbor, apple 또는 Gate[a-z]의 일부와 일치할 수 있습니다. a-z/[e-i]/ 범위의 단일 문자와 일치하는 문자 클래스는 neighbor, apple 또는 Gate의 일부에서 단일 문자와 일치할 수 있습니다.
[a-zA-Z]a-z 또는 A-Z의 문자 범위와 일치하는 문자 클래스
/[e-i]/는 “Hi neighbor!”, Grapple 또는 Gate^ 부분의 단일 문자와 일치할 수 있습니다. Start of line/^Hello/는 'Hello'$End of line/Goodbye$/로 시작하는 줄과 일치하고 'Goodbye'\AStart로 끝나는 줄과 일치합니다. '^' 와 비슷하지만 여러 줄 모드가 없습니다/\Aa/ 는 apple의 'a'와 일치하지만 apricot의 'a'는 문자열의 시작이 아니기 때문에 일치하지 않습니다.
사과
apricot\z 문자열의 끝입니다. '$'와 유사하지만 여러 줄 모드가 없음/\za/는 zebra의 'a'와 일치하지만 문자열의 끝이 아니기 때문에 libra의 'a'와 일치하지 않습니다.
librazebra.와일드 카드. 점은 모든 문자와 일치합니다. /./는 apple의 모든 단일 문자와 일치합니다. 하나 이상의 이전 메타 문자/aa와 일치합니다.+/는 'aa', 'aaaaaaa'와 일치하지만 하나 이상의 이전 메타 문자(이 경우 두 번째입니다)여야 하므로 'a'와 일치하지 않습니다. a)*0개 이상의 이전 메타 문자/ab와 일치합니다*/는 'a', 'ab', 'abbbbbbb'와 일치합니다.\s모든 공백과 일치합니다 문자/^The\s.+s$/는 비틀즈와 일치합니다. , 롤링 스톤즈, 크랜베리 등 \S공백이 아닌 문자/\S+/는 The Beatles와 일치합니다. , 롤링 스톤즈, 크랜베리 등 \d모든 숫자/\d+/는 22, 33333, 0 등과 일치합니다.\DA숫자가 아닌 모든 문자/\D+/는 'Hello, 안녕'과 일치합니다.\w모든 단어 문자/ny\w*/는 'ny_152', 'nypost39' 등과 일치합니다.\W모든 비단어 문자/\W+/는 ')(*&^%$'a{3}정확히 3개 중 'a'/\d{3}-\d{3}-\d{4}/는 555-555-5555a와 일치합니다.{3,}'a'/[a-zA-Z0-9!#$^&*)(]{8,}/ 중 세 개 이상은 'xE*BqRx14B7TAQp' ⇐와 일치하며 이는 비밀번호로 사용될 수 있는 것처럼 보입니다!a{3, 6}'a'/[a-zA-Z0-9!#$^&*)(]{8,32}/ 중 3~6개는 길이가 3자 초과 32자 미만이므로 '0XX!pC3Odpu30Qc'와 일치합니다.a?0 또는 'a'/\d?-\d{3)-\d{3}-\d{4}/ 중 1개는 앞에 국제 코드가 첨부된 전화번호와 일치합니다. 앞면에 국제 코드가 부착되지 않은 것.
메타문자를 사용하는 것은 사용자가 웹사이트에서 양식을 작성할 때 검증에 좋습니다. 우리는 올바른 정보가 입력되었는지 확인하고 싶습니다. 이는 RegEx를 사용하여 주소, 이메일 또는 전화번호의 패턴이 올바른 형식인지 확인하는 데 유용합니다. 이로 인해 새 계정을 등록할 때 사용자 오류가 줄어들고 데이터베이스가 더 잘 구성됩니다.
Ruby에서 RegEx를 테스트하는 방법
스캔과 일치를 구별하는 데 사용할 코드는 다음과 같습니다.
#!/usr/bin/ruby
class RegexTest
def initialize(str, regex)
@str = str
@regex = regex
@result = str.scan(regex)
end
def display_details()
puts "String = #@str"
puts "regex = #@regex"
puts "result = #@result"
end
end
# Create Objects
str1 = RegexTest.new("The rain in Spain stays mainly on the plain", /\w+ain/)
str2 = RegexTest.new("In Hertford, Hereford, and Hampshire, hurricanes hardly ever happen", /H\w+/)
# Call Methods
str1.display_details()
str2.display_details()
스캔
Ruby의 scan 메소드는 정규식과 일치하는 모든 문자열의 배열을 반환합니다.
str1: result = ["rain", "Spain", "main", "plain"]
str2: result = ["Hertford", "Hereford", "Hampshire"]
이를 통해 결과에 대해 원하는 모든 작업을 수행할 수 있습니다.
정규식 일치
정규식 Match 메서드는 scan과 매우 유사하지만 모든 일치 항목 대신 일치 항목의 첫 번째 인스턴스를 찾습니다. @result =str.scan(regex)를 @result =str.match(regex)로 변경하여 차이점을 살펴보세요.
str1:result = rain
str2:result = Hertford
그러나 Match는
그렙
Grep은 배열에서 일치하는 문자열을 찾는 열거 가능한 방법입니다. 정규식과 일치하는 모든 문자열의 배열을 반환합니다. 우리가 가지고 있는 코드를 사용하여 전달한 문자열이 배열로 분할되었는지 확인해야 합니다.
이렇게 하려면 다음 코드 줄을 변경하세요:
@result = str.match(regex)
그리고 다음과 같이 변경하세요:
@result = str.split(/\s|,/).grep(regex);

"Career Karma는 제가 가장 필요할 때 제 삶에 들어왔고 빠르게 부트캠프에 적응할 수 있도록 도와주었습니다. 졸업한 지 두 달 만에 저는 제 삶의 가치와 목표에 맞는 꿈의 직업을 찾았습니다!"
Venus, Rockbot의 소프트웨어 엔지니어
귀하에게 적합한 부트캠프 찾기
그러면 첫 번째 결과와 비슷한 결과를 얻게 됩니다.
str1: result = ["rain", "Spain", "main", "plain"]
str2: result = ["Hertford", "Hereford", "Hampshire"]
Str =~ RegEx
=~ 사용 기본 일치 연산자를 사용하면 문자열을 정규식과 비교하고 일치 항목의 첫 번째 인덱스를 반환할 수 있습니다. 일치하는 항목이 없으면 nil을 반환합니다.
결론
이 기사에서는 Ruby에서 정규식(RegEx)을 사용하는 방법에 대해 설명했습니다. Ruby로 무엇을 빌드할 수 있는지 자세히 알아보려면 'Ruby 코드는 무엇에 사용되나요?' 기사를 확인하세요. ”
Ruby를 배우는 더 좋은 방법을 원하시나요? Career Karma가 귀하에게 가장 적합한 교육 프로그램을 찾는 데 도움을 드립니다.