Programing

정규식-무엇이든 일치

lottogame 2020. 4. 12. 10:10
반응형

정규식-무엇이든 일치


공백을 포함하여 절대적으로 일치하는 표현을 어떻게 만듭니 까?
예:

정규식 : 나는 _____ 양을 샀다.

성냥 : 나는 양을 샀다. 나는 양을 샀다. 나는 다섯 양을 샀다.

을 사용하려고 시도했지만 (.*)작동하지 않는 것 같습니다.

업데이트 : 작동하도록했습니다. 문제는 정규 표현식이 아니 었습니다. (.) 문자가 이스케이프 된 것입니다.


일반적으로 점은 개행을 제외한 모든 문자와 일치합니다 .

따라서 .*작동하지 않으면 "도 줄 바꿈과 일치"옵션을 설정하십시오 (또는 사용 (?s).*).

"dotall"옵션이없는 JavaScript를 사용하는 경우을 시도하십시오 [\s\S]*. 이것은 "공백 또는 비 공백의 문자 수와 일치"-사실상 "모든 문자열과 일치"를 의미합니다.

JavaScript에서만 작동하고 다른 정규 표현식으로 인식되지 않는 또 다른 옵션은 [^]*모든 문자열과 일치하는 것입니다. 그러나 [\s\S]*더 휴대하기 쉽기 때문에 더 널리 사용되는 것 같습니다.


(.*?) 무엇이든 일치합니다-몇 년 동안 사용해 왔습니다.


다음 중 하나를 선택하고 암기하십시오 !!! :)

[\s\S]*
[\w\W]*
[\d\D]*

설명:

\s: 공백 : 공백이 \S아님

\w: 단어 : 단어가 \W아님

\d: 숫자 : 숫자가 \D아님

(당신은을 교환 할 수 있습니다 *에 대한 +당신이 1 개 이상의 문자하려는 경우 [대신 0 이상).




보너스 편집 :

한 줄로 모든 것을 일치 시키려면 다음을 사용할 수 있습니다.

[^\n]+

설명:

^: 아님

\n: 줄 바꿈

+: 1 자 이상


이 시도:

I bought (.* )?sheep

또는

I bought .*sheep

를 사용 .*하고 구현의 단일 줄과 동등한 것을 사용하고 있는지 확인하여 줄 끝에서 일치하도록하십시오 .

여기에 좋은 설명이 있습니다-> http://www.regular-expressions.info/dot.html


JavaScript의 경우 가장 쉽고 간단한 답변은 /.*/ 인 것 같습니다.

다른 사람들이 제안한 것처럼 /(.*?)/도 잘 작동하지만 /.*/가 더 간단합니다. 내가 볼 수 있거나 끝날 때까지 패턴 내부의 ()는 필요하지 않습니다. 빈 문자열을 포함하여 절대적으로 일치하는 것

비 솔루션 :

/ [\ s \ S] /는 빈 문자열과 일치하지 않으므로 솔루션이 아닙니다.

/ [\ s \ S] * / DOES는 빈 문자열과도 일치합니다. 그러나 문제가 있습니다 : 코드에서 코드를 사용하면 '* /'가 주석 끝으로 해석되므로 해당 코드를 주석 처리 할 수 ​​없습니다.

/ ([\ s \ S] *) / 작동하고 주석 문제가 없습니다. 그러나 /.*/보다 이해하기가 길고 복잡합니다.


(.*?)나를 위해 작동하지 않습니다. 에 둘러싸여있는 주석을 찾으려고하는데 /* */여러 줄이 포함될 수 있습니다.

이 시도:

([a]|[^a])

이 정규식과 일치 a하거나 anything else expect a. 물론 모든 것을 일치시키는 것을 의미합니다.

내 상황에서 BTW /\*([a]|[^a])*/는 C 스타일 주석과 일치합니다.

더 간결한 방법으로 @mpen에게 감사합니다.

[\s\S]

때문에 .줄 바꿈 또는 줄 끝을 제외하고 단일 문자를 찾습니다.

따라서 무엇이든 일치시키기 위해 다음과 같이 사용할 수 있습니다. (.|\n)*?

그것이 도움이되기를 바랍니다!


<?php
$str = "I bought _ sheep";
preg_match("/I bought (.*?) sheep", $str, $match);
print_r($match);
?>

http://sandbox.phpcode.eu/g/b2243.php


나는 사용을 추천합니다 /(?=.*...)/g

const text1 = 'I am using regex';
/(?=.*regex)/g.test(text1) // true

const text2 = 'regex is awesome';
/(?=.*regex)/g.test(text2) // true

const text3 = 'regex is util';
/(?=.*util)(?=.*regex)/g.test(text3) // true

const text4 = 'util is necessary';
/(?=.*util)(?=.*regex)/g.test(text4) // false because need regex in text

정규식 101사용 하여 테스트


솔직히 많은 답변이 오래되었으므로 "/.*/i"로 문자 내용에 관계없이 단순히 문자열을 테스트하면 모든 것을 충분히 얻을 수 있음을 알았습니다.


JavaScript를 사용하는 경우 ES2018은 s (dotAll) 플래그를 추가했습니다. s플래그 점은 .모든 문자가 줄 바꿈을 포함 일치합니다.

console.log("line_1\nline_2".match(/.+/s))

참고 : 일부 브라우저에서는 아직 지원되지 않습니다.

참고 URL : https://stackoverflow.com/questions/6711971/regular-expressions-match-anything

반응형