정규식-무엇이든 일치
공백을 포함하여 절대적으로 일치하는 표현을 어떻게 만듭니 까?
예:
정규식 : 나는 _____ 양을 샀다.
성냥 : 나는 양을 샀다. 나는 양을 샀다. 나는 다섯 양을 샀다.
을 사용하려고 시도했지만 (.*)
작동하지 않는 것 같습니다.
업데이트 : 작동하도록했습니다. 문제는 정규 표현식이 아니 었습니다. (.) 문자가 이스케이프 된 것입니다.
일반적으로 점은 개행을 제외한 모든 문자와 일치합니다 .
따라서 .*
작동하지 않으면 "도 줄 바꿈과 일치"옵션을 설정하십시오 (또는 사용 (?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
'Programing' 카테고리의 다른 글
우분투에서 GOPATH 환경 변수를 어떻게 설정합니까? (0) | 2020.04.12 |
---|---|
TFS 바인딩을 완전히 제거하는 방법 (0) | 2020.04.12 |
json.dumps vs flask.jsonify (0) | 2020.04.12 |
C ++에 가상 생성자가없는 이유는 무엇입니까? (0) | 2020.04.12 |
문자가 문자열에 있는지 테스트 (0) | 2020.04.11 |