pos () 보고서가 캡처되지 않은 그룹과도 일치하는 이유는 무엇입니까?

user6204751

?다음과 같이 매개 변수가있는 SQL 쿼리에서 자리 표시 자 ( 따옴표없이 맨손으로)를 일치시키고 싶습니다.

UPDATE `table` SET `col1`=? WHERE `col2`=? AND `x`="??as"

( SQL::Parser대신 사용해야한다는 것을 알고 있습니다. 여기에서 나와 함께합니다.)

이 정규식 (?:`.+?`)|(?:'.+?')|(?:".+?")|(\?)에 노출 된 물음표와 일치 `col1`=?하고 `col2`=?있지만에서 따옴표 안에 물음표을 건너 `x`="??as"내가 원하는대로. https://regex101.com/r/iH4aV2/3 에서 작동하는 것을 볼 수 있습니다 .

이제 정규식이 PCRE에서 실행됩니다. 이 Perl을 실행하면 :

# same regex and test string
my $x = 'UPDATE `table` SET `col1`=? WHERE `col2`=? AND `x`="??as"';          

while ($x =~ /(?:`.+?`)|(?:'.+?')|(?:".+?")|(\?)/g) {
    print "A:".pos($x)."\n";
}

나는 얻다:

A:14
A:25
A:27
A:40
A:42
A:50
A:57

나는 regex101 사이트에서와 같이 맨발의 물음표의 위치만을 기대하고 있었다.

A:27
A:42

왜 이런 일이 발생합니까? Perl의 정규식 엔진이 PCRE처럼 작동하도록 할 수 있습니까?

다니엘 마틴

가장 간단한 해결책은 확인하기 전에 캡처하는 괄호가 실제로 무언가를 캡처했는지 확인하는 것입니다 pos.

my $x = 'UPDATE `table` SET `col1`=? WHERE `col2`=? AND "x"="??as"';
while($x =~ /(?:`.+?`)|(?:'.+')|(?:".+?")|(\?)/g) {
  if (defined($1)) {
    print "A:".pos($x)."\n";
  }
}

이렇게하면 원하는 결과를 얻을 수 있습니다.

( 댓글에 언급 된 공상 (*SKIP)(*FAIL)동사를 사용할 수 있지만 더 깔끔해 보입니다)

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

이 파이썬 정규식이 어떤 그룹과도 일치하지 않는 이유는 무엇입니까?

분류에서Dev

캡처되지 않은 변수가 경고를 일으키는 이유는 무엇입니까?

분류에서Dev

비 캡처 그룹이 정의 된대로 반복되지 않는 이유는 무엇입니까?

분류에서Dev

Grub과 Ubuntu가 동일한 하드 드라이브에 설치되지 않은 이유는 무엇입니까?

분류에서Dev

Grub과 Ubuntu가 동일한 하드 드라이브에 설치되지 않은 이유는 무엇입니까?

분류에서Dev

WSD가 WordNet과 일치하지 않는 이유는 무엇입니까?

분류에서Dev

제목과 날짜가 일치하지 않는 이유는 무엇입니까?

분류에서Dev

RegularExpressionValidator가 정규식과 일치하지 않는 이유는 무엇입니까?

분류에서Dev

JavaScript Regex : 정확히 N 개의 문자와 일치하고 과도한 문자가 캡처 그룹으로 유출되는 것을 방지합니다.

분류에서Dev

내 정규식이 여전히 캡처되지 않은 그룹을 캡처하고 있습니다.

분류에서Dev

tcpdump가 데이터를 캡처하지 않는 것 같습니다. 그 이유는 무엇입니까?

분류에서Dev

정의되지 않은 일부 메서드 (예 : Foo)가`method_missing`에 의해 캡처되지 않는 이유는 무엇입니까?

분류에서Dev

C ++에서 일치하지 않는 그룹의 위치는 무엇입니까?

분류에서Dev

SHA가 일치하지 않는 이유는 무엇입니까?

분류에서Dev

캡처되지 않는 그룹 RegEx 내에서 이메일 주소 캡처

분류에서Dev

컴파일러가이 함수 유형과 일치하지 않는 이유는 무엇입니까?

분류에서Dev

텐서 보드에 표시된 값이 실제 값과 일치하지 않는 이유는 무엇입니까?

분류에서Dev

Keras : Conv2D 레이어의 출력 크기가 예상되는 피처 맵 모양과 일치하지 않는 이유는 무엇입니까?

분류에서Dev

캡처 그룹이있는이 정규식이 bash에서 작동하지 않는 이유는 무엇입니까?

분류에서Dev

그룹에있는 항목이 뒤에 오는 경우 부정 미리보기가 일치를 방지하지 않는 이유는 무엇입니까?

분류에서Dev

Mac sed가 내가 기대하는 것과 일치하지 않는 이유는 무엇입니까?

분류에서Dev

내 응용 프로그램에서 클립 보드가 명확하지 않은데도 비어 있다고 알려주는 이유는 무엇입니까?

분류에서Dev

일치 그룹이 존재하지만 실제로 일치하지 않는 이유는 무엇입니까?

분류에서Dev

이 javascript non-greedy regex가 아무것도 일치하지 않는 이유는 무엇입니까?

분류에서Dev

컴파일러가 처리하지 않고`std :: launder`를 도입하는 이유는 무엇입니까?

분류에서Dev

이 반복되는 내부 그룹이 정규식에서 일치하지 않는 이유는 무엇입니까?

분류에서Dev

내 정규식의 선택적 캡처 그룹이 작동하지 않는 이유는 무엇입니까?

분류에서Dev

dd와 같은 일부 도구가 장치에서 작동하는 데 마운트 지점이 필요하지 않은 이유는 무엇입니까?

분류에서Dev

XmlNamespaceManager가 HasNamespace에 대해 일관되지 않은 결과를 반환하는 이유는 무엇입니까?

Related 관련 기사

  1. 1

    이 파이썬 정규식이 어떤 그룹과도 일치하지 않는 이유는 무엇입니까?

  2. 2

    캡처되지 않은 변수가 경고를 일으키는 이유는 무엇입니까?

  3. 3

    비 캡처 그룹이 정의 된대로 반복되지 않는 이유는 무엇입니까?

  4. 4

    Grub과 Ubuntu가 동일한 하드 드라이브에 설치되지 않은 이유는 무엇입니까?

  5. 5

    Grub과 Ubuntu가 동일한 하드 드라이브에 설치되지 않은 이유는 무엇입니까?

  6. 6

    WSD가 WordNet과 일치하지 않는 이유는 무엇입니까?

  7. 7

    제목과 날짜가 일치하지 않는 이유는 무엇입니까?

  8. 8

    RegularExpressionValidator가 정규식과 일치하지 않는 이유는 무엇입니까?

  9. 9

    JavaScript Regex : 정확히 N 개의 문자와 일치하고 과도한 문자가 캡처 그룹으로 유출되는 것을 방지합니다.

  10. 10

    내 정규식이 여전히 캡처되지 않은 그룹을 캡처하고 있습니다.

  11. 11

    tcpdump가 데이터를 캡처하지 않는 것 같습니다. 그 이유는 무엇입니까?

  12. 12

    정의되지 않은 일부 메서드 (예 : Foo)가`method_missing`에 의해 캡처되지 않는 이유는 무엇입니까?

  13. 13

    C ++에서 일치하지 않는 그룹의 위치는 무엇입니까?

  14. 14

    SHA가 일치하지 않는 이유는 무엇입니까?

  15. 15

    캡처되지 않는 그룹 RegEx 내에서 이메일 주소 캡처

  16. 16

    컴파일러가이 함수 유형과 일치하지 않는 이유는 무엇입니까?

  17. 17

    텐서 보드에 표시된 값이 실제 값과 일치하지 않는 이유는 무엇입니까?

  18. 18

    Keras : Conv2D 레이어의 출력 크기가 예상되는 피처 맵 모양과 일치하지 않는 이유는 무엇입니까?

  19. 19

    캡처 그룹이있는이 정규식이 bash에서 작동하지 않는 이유는 무엇입니까?

  20. 20

    그룹에있는 항목이 뒤에 오는 경우 부정 미리보기가 일치를 방지하지 않는 이유는 무엇입니까?

  21. 21

    Mac sed가 내가 기대하는 것과 일치하지 않는 이유는 무엇입니까?

  22. 22

    내 응용 프로그램에서 클립 보드가 명확하지 않은데도 비어 있다고 알려주는 이유는 무엇입니까?

  23. 23

    일치 그룹이 존재하지만 실제로 일치하지 않는 이유는 무엇입니까?

  24. 24

    이 javascript non-greedy regex가 아무것도 일치하지 않는 이유는 무엇입니까?

  25. 25

    컴파일러가 처리하지 않고`std :: launder`를 도입하는 이유는 무엇입니까?

  26. 26

    이 반복되는 내부 그룹이 정규식에서 일치하지 않는 이유는 무엇입니까?

  27. 27

    내 정규식의 선택적 캡처 그룹이 작동하지 않는 이유는 무엇입니까?

  28. 28

    dd와 같은 일부 도구가 장치에서 작동하는 데 마운트 지점이 필요하지 않은 이유는 무엇입니까?

  29. 29

    XmlNamespaceManager가 HasNamespace에 대해 일관되지 않은 결과를 반환하는 이유는 무엇입니까?

뜨겁다태그

보관