ProgramingTip

정규식 단어 일치

bestdevel 2020. 12. 1. 19:14
반응형

정규식 단어 일치


가수, 작사가 추출을 위해 정규식을 만들려고합니다. 작사가 검색을 선택적으로 만드는 방법이 궁금합니다.

여러 줄 노드 샘플 :

Fireworks Singer: Katy Perry
Vogue Singers: Madonna, Karen Lyricist: Madonna

정규식 : /Singers?:(.\*)\s?Lyricists?:(.\*)/

이 두 번째 줄과 정확하게 일치하고 추출 Singers(Madonna, Karen)하고Lyricists(Madonna)

하지만 작사가가없는 첫 번째 줄 작동하지 않습니다.

작사가 검색을 만들려면 어떻게해야합니까?


비 캡처 그룹에서 일치시킬 부분을 묶을 수 있습니다 (?:).. 그런 다음 정규식에서 one-단위로 처리 할 수 있으며 이후에 추가하여 ?선택 사항으로 만들 수 있습니다. 예 :

/Singers?:(.*)\s?(?:Lyricists?:(.*))?/

여기서는 모든 캐릭터를 탐욕스럽게 먹기

\s?때문에 쓸모 .*가 정비 역 추적이 필요하지 않습니다. 또한 이것은 (?:Lyricists?:(.*))동일한 이유로 부품이 일치 여부하지 않음을 의미합니다 . 욕심이없는 버전의 .*.*?함께이 $문제를 해결할 수 있습니다.

/Singers?:(.*?)\s*(?:Lyricists?:(.*))?$/

일부 추가 공백이 배치됩니다. 이 또한 제거되어 다음과 같은 최종 정규식을 제공 할 수 있습니다.

/Singers?:\s*(.*?)\s*(?:Lyricists?:\s*(.*))?$/

Cameron의 솔루션에 추가하기 위해. 소스 코드에 Singers와 Lyricists가 모두 포함 된 여러 줄이있는 경우 '$'가 줄 끝과 일치하도록 'm'다중 줄 수정 튼 추가해야 것입니다. (사용중인 언어를 말하지 않을 수 있습니다. 'i'수정 자도 추가 할 수 있습니다.)

참고 URL : https://stackoverflow.com/questions/5254804/regex-optional-word-match

반응형