정규식에서 "awk"를 사용할 때 "|"에 해당하는 "AND" 연산자는 무엇입니까?

정규식에서 "awk"를 사용할 때 "|"에 해당하는 "AND" 연산자는 무엇입니까?

나는 이것이 |논리적 "OR" 연산자라는 것을 안다.~에정규식. 그러나 동등한 "AND" 연산자는 무엇입니까(다시 말하지만,~에정규식)?

노트:

  • 이는 여러 표현식의 "AND" 연산자와는 아무런 관련이 없습니다 &&.
  • 예를 들어, 및 을 /A&B/모두 일치시키는 것과 같습니다 .AB

답변1

내가 익숙한 정규식 스타일에는 그러한 연산자가 없습니다. 둘 다 있는 입력을 일치시키려면 둘 다 특정 순서로 필요한 경우 OR를 쓰거나 두 표현식을 결합하여 두 순서 중 하나를 허용 A할 수 B있습니다 .A.*BB.*AA.*B|B.*A

또는 두 개의 별도 게임을 플레이하세요. 예를 들면 다음과 같습니다 awk.

awk '/A/ && /B/' file

또는 두 grep인스턴스를 모두 수동으로 처리합니다.

grep A file | grep B

실제로 정규식에서는 AND 연산자를 사용할 필요가 없습니다. 정규식의 아이디어는 문자열을 설명한다는 것입니다. 정의에 따라 일치시키려는 내용을 정규식에 넣습니다. 따라서 A 또는 B 일치를 허용하려면 OR가 필요하지만 AND는 기본적으로 정규식에 내장되어 있습니다. 정규식에 작성하는 모든 항목은 일치해야 하므로 모든 것이 기본적으로 AND 연산자로 연결되므로 A 전용 AND는 의미가 없습니다.

답변2

참고: Stéphane Chazelas의 의견에서 알 수 있듯이 이 답변은 부분적으로정규식 구현하다AND 연산자가 허용됩니다. 아래 추론은 여전히 ​​정확합니다. 이러한 연산자는 부과하는 조건이 서로 호환되는지 확인한 경우에만 의미가 있기 때문입니다.


내 생각에 RegExes의 - 연산자에 해당하는 "AND"는 있을 수 없다는 것이 대답이라고 생각합니다. |왜냐하면 궁극적으로 정규 표현식은 입력 문자열의 문자 수준에서 일치를 수행하기 때문입니다(때로는 암시적으로 반복 연산자를 통해). 따라서 직접 번들링합니다.문자열의 특정 위치로(예를 들어이 Q&A는 유사한 토론을 위한 것입니다.).

요점은 다음과 같은 형식의 표현이 있는 경우입니다( awk여기서는 질문 제목으로 인해 명시적인 구문을 사용하고 있습니다).

$0 ~ /something(A|B)somethingelse/

이를 위해서는 문자열이 필요합니다.또는 또는 A직후와 직전의 B특정 위치 에서somethingsomethingelse성냥. 반복 연산자가 포함된 패턴이 있는 경우 위치 요구 사항이 더 동적일 수 있습니다.

$0 ~ /[a-f]+(A|B)[0-9]+/

AB그러나 직위별 발생 또는 연관이 있다는 것은 여전히 ​​중요합니다.소문자만 포함된 패턴 뒤 a... f(1) 숫자만 포함된 패턴 앞 0...9.

해당하는 'AND' 조건이 있을 수 없습니다.

$0 ~ /something(A&B)somethingelse/

이는 입력 문자열이 동일한 위치에 A및 를 포함해야 함을 의미하므로 B분명히 작동하지 않습니다.

따라서 "AND" 연산자가 유용한 유일한 사용 사례는 문자열의 일반 속성 을 설명하는 것입니다. 여기서 A각 필수 속성은 단일 정규식으로 표현될 수 있습니다. B정확한 절대 위치와 상대 위치"를 입력해야 하지만 이는 다시 여러 표현식을 결합하는 연산자를 사용하게 되며 &&관심이 없다고 말할 수 있으며 물론 이 해결 방법에 대한 다양한 대체 공식이 있습니다.@terdon의 답변.


(1) C 이상으로 정렬

관련 정보