REGEX LINE BY LINE : Triple Quotes와 일치하는 방법이지만 이중 인용문은 아닙니다.

StackOverflow https://stackoverflow.com/questions/1494929

  •  18-09-2019
  •  | 
  •  

문제

많은 단어 / 문자 등의 문자열에 1 세트의 트리플 이중 점수 (예 : "") 만 포함되어 있는지 확인해야하지만 단일 더블 퀘스트 ( ")와 이중 이중 점수가 포함될 수도 있습니다 ( ""), Regex를 사용합니다. 지금까지 큰 성공을 거두지 못했습니다.

도움이 되었습니까?

해결책

부정적인 전망대가있는 정수가 할 수 있습니다.

(?!.*"{3}.*"{3}).*"{3}.*

이 Java 코드 라인으로 시도했습니다.

String good = "hello \"\"\" hello \"\" hello ";
String bad = "hello \"\"\" hello \"\"\" hello ";
String regex = "(?!.*\"{3}.*\"{3}).*\"{3}.*";
System.out.println( good.matches( regex ) );
System.out.println( bad.matches( regex ) );

... 출력 :

true
false

다른 팁

정확히 3 개의 이중 인용물과 일치하기 위해 발생한 연산자 수를 사용해보십시오.

  • \"{3}
  • ["]{3}
  • [\"]{3}

나는 사용을 신속하게 확인했다 http://www.regextester.com/, 잘 작동하는 것 같습니다.

그러나 선택 언어로 정규식을 올바르게 컴파일하는 방법은 다를 수 있습니다!

언어에 따라 다르지만 3 개의 이중 인용문 만 일치하면됩니다 (예 : /\"{3}/) 그런 다음 일치를 계산하여 정확히 하나가 있는지 확인하십시오.

아마도이 작업을 수행하는 방법에는 여러 가지가 있지만 간단한 방법은 단지 여러 번의 트리플 인용문을 찾은 다음 정규 표현을 뒤집는 것입니다. 다음은 Perl의 예입니다.

use strict;
use warnings;

my $match = 'hello """ hello "" hello';
my $no_match = 'hello """ hello """ hello';
my $regex = '[\"]{3}.*?[\"]{3}';

if ($match !~ /$regex/) {
    print "Matched as it should!\n";
}
if ($no_match !~ /$regex/) {
    print "You shouldn't see this!\n";
}

출력 :

Matched as it should!

기본적으로, 당신은 원하지 않는 것을 찾아서 진실을 반전 시키라고 말하고 있습니다. 그것이 말이되기를 바랍니다. 도움이 필요한 경우 예제를 다른 언어로 변환하는 데 도움이 될 수 있습니다.

이것은 당신에게 좋은 출발 일 수 있습니다.

^(\"([^\"\n\\]|\\[abfnrtv?\"'\\0-7]|\\x[0-9a-fA-F])*\"|'([^'\n\\]|\\[abfnrtv?\"'\\0-7]|\\x[0-9a-fA-F])*'|\"\"\"((?!\"\"\")[^\\]|\\[abfnrtv?\"'\\0-7]|\\x[0-9a-fA-F])*\"\"\")$

행동으로보십시오 regex101.com.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top