정규식-무엇이든 일치


278

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

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

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

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

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


27
.*작동해야합니다. 실제 코드를 붙여 넣을 수 있습니까?
Jacob Eggers

2
어떤 언어로 코딩하고 있습니까?
Ziggy

9
점은 개행과 일치하지 않습니다
zee

답변:


293

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

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

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

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


7
.*일치하지 않지만 0 문자와 일치하기 때문에 \n포함 된 문자열을 처리 \n합니다.
토토

1
Javascript를 사용하는 경우 변수를이 패턴으로 설정할 때 슬래시를 슬래시하는 것을 잊지 마십시오. 예 : var pattern = "[\ s \\ S] *";
아스트라 곰

(?s).*나를위한 작품은 새로운 라인을 포함하여 모든 일치
구자라트 산타나

1
/ [\ s \ S] * /를 사용하는 데 문제가 있습니다. 코드에서 코드를 사용하고 패턴의 끝이 주석의 끝을 의미하기 때문에 구문 오류가 발생하는 코드를 주석 처리하면. 그런 다음 주석 처리 된 코드에서 해당 패턴을 제거하여 작동 시키십시오. 그러나 주석을 다시 주석 처리하지 않으면 더 이상 작동하지 않거나 이전처럼 작동하지 않으며 작동해야합니다.
Panu Logic

이것은 별표로 끝나는 정규 표현식의 경우입니다. 물론 *(에서와 같이 /.*(?:)/) 무언가를 추가 하거나 정규 표현식 생성자 ( var foo = new RegExp(".*"))를 사용하면 피할 수 있습니다 .
Tim Pietzcker

177

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


61
그러나 그것은 개행과 일치합니까?
ineedahero

나는 Sublime Text에서 이것을 사용했으며 완벽하게 작동했습니다. 감사! ("title":".*?")
SCabralO

8
Javascript에서 [\s\S]*또는을 사용하십시오 [^]*.
Jeff Huijsmans

잘 모르겠지만이 표현을 사용할 때마다 유스 케이스에 대해 구체적인 표현을하지 않기 때문에 죄책감을 느낍니다. 말하자면이 경우 w+충분하지 않습니다, 나는 결국 사용 .+. 운 좋게도 아직 나를 물지 않았다.
Tushar

Python을 사용하여 저에게
효과적입니다

89

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

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

설명:

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

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

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

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




보너스 편집 :

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

[^\n]+

설명:

^: 아님

\n: 줄 바꿈

+: 1 자 이상




4

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

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

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


2

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

이 시도:

([a]|[^a])

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

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

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

[\s\S]

1
JS에서이를 수행하는 가장 일반적인 방법은 [\s\S]공간과 공백이 아닌 일치입니다.
mpen

2

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

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

비 솔루션 :

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

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

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


BTW. 위의 코드 발췌 부분은 스택 오버플로로 인해 내 대답의 일부가 기울임 꼴로 렌더링되는 것으로 보입니다.
Panu Logic

1

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

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

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


1

2018 사양은 s 플래그 (별칭 : dotAll)를 제공하므로 줄 바꿈을 .포함한 모든 문자와 일치합니다.

const regExAll = /.*/s; //notice the 's'

let str = `
Everything
	in 	this
			string
					will
						be
	matched. Including whitespace (even Linebreaks).
`;

console.log(`Match:`, regExAll.test(str)); //true
console.log(`Index Location:`, str.search(regExAll));

let newStr = str.replace(regExAll,"🐔");
console.log(`Replaced with:`,newStr); //Index: 0

위의 코드는 Chrome에서 작동하지만 s플래그는 Firefox에서 아직 구현되지 않았지만 곧 적용 됩니다.



0

나는 사용을 추천합니다 /(?=.*...)/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

정규식 을 사용 하여 테스트


0

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.