INSERT INTO TestTable
(
Test1,
Test2,
Test3,
Test4,
Test5
)
VALUES
(
@Test1,
@Test2,
@Test3,
@Test4,
@Test5
)
SET @Id = SCOPE_IDENTITY()
내 쿼리에서 설정되지 않은 모든 변수를 얻으려고 시도하는 메신저 이것은 내 목표가 쿼리에 설정된 모든 변수를 포함하지 않는 @Id를 얻는 내 Regex입니다.
이것은 내 정규식입니다
Regex.Matches(sql, @"\@\w+").Cast<Match>().Select(m => m.Value).ToList();
당신이 사용할 수있는
\B@\w+\b(?!\s*=)
regex 데모를 참조하십시오 . 세부 사항 :
\B@
- @
문자 문자가 앞에 붙지 않은 일치 ( [email protected]
, 등과 같은 하위 문자열 일치를 방지하기 위해 )\w+
-하나 이상의 단어 문자\b
-단어 경계 (이후 부정 예견이 일치에 실패 할 때 역 추적을 방지하여 전체 @word
가 실패 할 수 있고 @wor
일치 를 반환하지 않도록하기 위해 필요함 )(?!\s*=)
- 현재 위치의 바로 오른쪽에 0 개 이상의 공백과 문자가있는 경우 일치에 실패 하는 부정 미리보기 입니다 =
.참고 @
특별한 정규식 메타 문자가 아니고는 정규 표현식에서 탈출 할 필요가 없습니다.
참고 항목 C #을 데모를 :
var text = "INSERT INTO TestTable\r\n(\r\n Test1,\r\n Test2,\r\n Test3,\r\n Test4,\r\n Test5\r\n)\r\nVALUES\r\n(\r\n @Test1,\r\n @Test2,\r\n\r\n @Test3,\r\n @Test4,\r\n\r\n @Test5\r\n)\r\n\r\nSET @Id = SCOPE_IDENTITY()";
var result = Regex.Matches(text, @"\B@\w+\b(?!\s*=)")
.Cast<Match>()
.Select(x => x.Value);
foreach (var s in result)
Console.WriteLine(s);
산출:
@Test1
@Test2
@Test3
@Test4
@Test5
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다