C\#의 정규 표현 식 더 블 따옴표 문제

그 중 에 포 함 된 문자열 에 두 개의 따옴표 가 포함 되 어 있다 면,두 개의 따옴표 로 표시 합 니 다.역 슬 래 쉬 에 두 개의 따옴표(\")를 추가 하 는 것 도 아니 고,슬 래 쉬 에 두 개의 따옴표(/")를 추가 하 는 것 도 아 닙 니 다.
정규 표현 식 이 CSS 에 있 는 그림 을 가 져 오 는 예 입 니 다.URL 에 있 는 그림 주 소 는 두 개의 따옴표 가 있 습 니 다.두 개의 따옴표 로 표시 하 는 것 을 주의해 야 합 니 다.

static void Main(string[] args)
    {
      Regex reg = new Regex(@"url\((['""]?)(.+[^'""])\1\)"); //               ,       
      Console.WriteLine(reg.Match(@"{background-image:url(//ssl.gstatic.com/ui/v1/menu/checkmark.png);backgro")); //   url(//ssl.gstatic.com/ui/v1/menu/checkmark.png)

      Console.ReadKey();
    }
그룹 이름 이 있 는 후 인용 은 C\#에서\k입 니 다.중복 단어 와 일치 하 는 예:

static void Main(string[] args)
    {
      Regex reg = new Regex(@"\b(?<group>\w+ +)\k<group>");
      string str = "what the hell are you you talking about?";
      Console.WriteLine(reg.Match(str));

      Console.ReadKey();
    }
C\#에서 new Regex 대상 을 선택 할 때 두 번 째 매개 변 수 는 매 거 진 지원 으로 일치 하 는 모드 를 선택 할 수 있 습 니 다.이 매 거 진 값 이 정규 에 미 치 는 영향 에 대해 말씀 드 리 겠 습 니 다.
패턴 설명
.singleLine 점 호 는 모든 문자 와 일치 할 수 있 습 니 다.
.Multiline 확장^$와 일치 하여^와$가 문자열 내부 의 줄 바 꿈 자 를 일치 시 킬 수 있 습 니 다.
.Ignore Pattern Whitespace 디자인 의 느슨 한 배열 과 주석 모드
...IgnoreCase 대소 문자 구분 없 이 일치
    .ECMAScript 제한\w\s\d,ASCII 문자 만 유효 하도록 합 니 다.
.RightToLeft 전동 장치 의 구동 과정 은 변 하지 않 지만 방향 은 반대 입 니 다(문자 의 끝 에서 시작 하여 시작 으로 이동)
.copiled 는 정규 표현 식 을 최적화 하 는 데 시간 이 좀 더 걸 립 니 다.dll 에 컴 파일 되 어 여러 개의 메모 리 를 차지 하지만 일치 하 는 것 이 더 빠 릅 니 다.
.ExplicitCapture 일반 괄호()는 정상 적 인 상황 에서 캡 처 형 괄호 이지 만 이 모드 에서(?:...)마찬가지 로 그룹 을 나 누 면 캡 처 하지 않 습 니 다.
     RegexOptions.Compiled 의 의미
RegexOptions.Compiled 를 사용 하 는 것 과 RegexOptions.Compiled 를 사용 하지 않 는 것 의 대비
표준 사용 안 함
시동 속도 가 빠 르 고 느리다(최대 60 배)
메모리 사용량 이 적 음(정규 표현 식 당 5-15KB)
매 칭 속 도 는 보통 최대 10 배 까지 증가 합 니 다.
Regex Optons.Compiled 를 사 용 했 을 때 프로그램 이 실행 되 는 과정 에서 이 메모 리 는 계속 사용 되 고 방출 되 지 않 기 때문에 자주 사용 되 는 정규 표현 식 에 만 적합 합 니 다.
ECMAScript 모드
ECMAScript 는 아래 옵션 과 함께 만 사용 할 수 있 습 니 다.
  RegexOptons.IgnoreCase
  RegexOptons.Multiline
  RegexOptons.Compiled
또한 반사 선-숫자 는 역방향 인용 과 십 진법 전이 의 이의 성 이 없 으 며 역방향 인용 만 표시 할 수 있 기 때문이다.예 를 들 어\10 은 역방향 인용\1 을 나타 내 고 그 다음 에 문자 0 을 나타 낸다.이 모드 를 사용 하지 않 으 면\12 는 ASCII 용지 입력 문자 linefeed 와 일치 합 니 다.동시에\w\d\s\W\D\S 는 ASCII 와 일치 할 수 있 습 니 다.
또한 C\#에서 그룹의 번호 도 주의해 야 한다.
그룹 0 은 전체 정규 표현 식 이 일치 하 는 결과 입 니 다.
다음은 이름 없 는 그룹 입 니 다.
마지막 으로 그룹 이름 입 니 다.
예 를 들 면:
  (\w)(?\d+)(\s+)
   1   3     2
 특수 한 Replacement 처리
Regex.Replace 방법 과 Match.Result 방법 은 특수 처 리 를 할 수 있 는 replacement 문자열 을 받 을 수 있 습 니 다.다음 문자열 은 일치 하 는 텍스트 로 대 체 됩 니 다:
문자 시퀀스 교체 내용
  $&              전체 표현 식 이 일치 하 는 텍스트 는$0 에 해당 합 니 다.
  $1  $2            대응 하 는 번호 의 캡 처 그룹 에 일치 하 는 텍스트
${name}이름 포획 그룹 에 일치 하 는 텍스트
$'대상 문자열 에 텍스트 이전 텍스트 와 일치 합 니 다.
$'대상 문자열 에 텍스트 와 일치 하 는 텍스트
    $$단일$문자($1 은$$로 표 시 됩 니 다!)
  $_원본 대상 문자열 의 복사 본
$+.NET 에서 마지막 캡 처 괄호 가 일치 하 는 텍스트 를 표시 합 니 다.

static void Main(string[] args)
    {
      Regex reg1 = new Regex(@"\d+");
      string str = reg1.Replace("123","insert into table where id = $&");
      Console.WriteLine(str);   //   insert into table where id = 123

      Regex reg2 = new Regex(@"1\+1=(\d)");
      string str2 = reg2.Replace("1+1=3","  $1");
      Console.WriteLine(str2);  //     3

      Regex reg3 = new Regex(@"1\+1=(?<result>\d)");
      string str3 = reg3.Replace("1+1=3", "  ${result}");
      Console.WriteLine(str3);  //     3

      Regex reg4 = new Regex(@"\d+");
      string str4 = reg4.Replace("123ABC", "   $'"); //         
      Console.WriteLine(str4);  //      ABCABC             ABCABC ?  $'   ABC,           123。         

      Regex reg5 = new Regex(@"\d+");
      string str5 = reg5.Replace("ABC123", "   $`"); //ABC   ABC     1    
      Console.WriteLine(str5);

      Regex reg6 = new Regex(@"\d+");
      string str6 = reg6.Replace("ABC123","         $_");
      Console.WriteLine(str6);  //           ABC123

      Console.ReadKey();
    }
.net 의 정규 조립 부품 은 정규 표현 식 라 이브 러 리 를 구축 하 는 데 사 용 됩 니 다.하 드 디스크 에 저장 하면 다른 프로그램 도 호출 하여 재 활용 율 을 높 일 수 있 습 니 다.주로 Regex 류 의 CompileToAssembly 방법 을 사용 했다.  
오늘 아주 재 미 있 는 문제 에 부 딪 혔 습 니 다.회사 에 고객 이 하나 더 생 겼 습 니 다.제품 쪽 에서 키 워드 를 추가 하 는 것 이 너무 힘들다 고 해서 키 워드 를 대량으로 가 져 오 는 것 을 도와 주 었 습 니 다.형 은 요 며칠 정규 표현 식 을 연구 하고 있 었 습 니 다.그래서 두 마디 도 하지 않 고 바로 응 했 습 니 다.딱 봐 도 엑셀,됐어.NPOI 아직 안 배 웠 어.그래서 txt 텍스트 에 복사 합 니 다.
형식 은 다음 과 같 습 니 다.
중 산 대로
광 둥 간척 로
.....
하늘 이 나 를 도와 주 는 것 도 어렵 지 않 고,게다가 요 며칠 배 운 것 이 쓸모 가 있 는 것 같다.그래서 바로 다음 코드 가 생 겼 습 니 다.

static void Main(string[] args)
{
  string str = File.ReadAllText(@"D:\daoru.txt", Encoding.Default);
  Regex reg = new Regex(@".+");
  string str1 = reg.Replace(str, "insert into Keyword values(196,'admin1','admin1','$&')");
  File.WriteAllText(@"D:\123.txt", str1);

  Console.ReadKey();
}
이것 은 키워드 에 따라 SQL 문 구 를 만 드 는 방법 입 니 다.D 디스크 에서 txt 텍스트 를 가 져 옵 니 다.(여기 서 문제 가 발생 했 습 니 다.키 워드 는 중국어 이기 때문에 직감 적 으로 Utf-8 인 코딩 으로 읽 어야 한다 고 생각 했 는데 오류 가 발생 했 습 니 다.그래서 인터넷 에서 찾 아 보 니 엔 코 딩.default 로 이 문 제 를 해결 할 수 있 었 다).그리고 정규 표현 식 으로 키워드 에 일치 합 니 다.기본 new Regex()점 수 는 줄 바 꿈 문자 와 일치 하지 않 기 때문에 키워드 한 줄 에 한 줄 씩 적합 합 니 다.예 를 들 어 Excel 에서 복사 할 때 입 니 다.그리고 Regex 클래스 에서 제공 하 는 Replace 로 키 워드 를 Sql 구문 으로 바 꾸 고 데이터베이스 에 직접 붙 여 선택 하여 실행 합 니 다.OK。한 번 에 500 개 에 가 까 운 키 워드 를 가 져 왔 다.
정규 표현 식 을 잘 배 웠 다 고 생각 했 는데 어제 바 뀐 SQL 문장 에 문제 가 생 겨 데이터베이스 에 저 장 된 데이터 에 이유 없 이 줄 바 꿈 문자 가 하나 더 생 겼 다.사실 SQL 문 구 를 실행 할 때 SQLSERVER 는 최선 을 다 해 힌트 를 주 었 는데 너무 부주의 하거나 너무 일찍 기뻐 서 무시 했다.어제 SQL 문 구 를 실 행 했 을 때의 그림 보기:

줄 이 바 뀌 는 것 을 보 았 습 니 다.그러면 결과 에\r 가 더 생 길 것 입 니 다.데이터베이스 시트 에 서 는 아직 볼 수 없 지만 사용 할 때 표시 에 만 사용 해도 괜 찮 습 니 다.하지만 일치 하 는 데 사용 하면 비극 입 니 다.그래서 오늘 절 차 를 바 꿨 습 니 다.줄 바 꿈 자 를 바 꿔 야 합 니 다.코드 는 다음 과 같이 바 뀌 었 습 니 다.그 중에서 빨간색 표 시 를 바 꾸 었 습 니 다.

static void Main(string[] args)
    {
      string str = File.ReadAllText(@"D:\daoru.txt", Encoding.Default);
      Regex reg = new Regex(@".+");
      string str1 = reg.Replace(str, "insert into JM_SinaBlog_KeyWord values(105,'jmeii','jmeii','$&')").Replace((char)13, (char)0);//here
      File.WriteAllText(@"D:\123.txt", str1);

      Console.ReadKey();
    }
이렇게 되면 줄 바 꿈 자 를 교체 할 것 이다.생 성 된 코드 를 SQLSERVER 에 복사 하면 SQLSERVER 의 디 스 플레이 가 변 한 것 을 볼 수 있 습 니 다.

이렇게 하면 문제 가 없습니다.앞으로 정규 표현 식 을 쓸 때 줄 을 바 꿔 야 합 니 다.빈 칸 이 매우 민감 해 야 합 니 다.

좋은 웹페이지 즐겨찾기