2013-05-29 3 views
-1

내가 찾고있는 정확한 정규 표현식을 알아낼 수 없습니다. 본질적으로 내가 필요한 것은 다음과 같다.스트리트 접두사 및 와일드 카드로 RegEx

사용자가 N W E S와 같은 거리 접두사를 검색하고 정규식이이를 무시하는 와일드 카드 (%, *)를 포함하는 경우. 나는 정규 표현식이 N W E S와 독점적으로 작동하기를 원한다.

그렇다면 어떻게하면 옆에있는 문자가 있으면 무시할 것인지 말하는 정규식을 작성하십시오. 이것은 내가 지금까지 가지고있는 것이다.

^(N | S | W | E) \

하지만 N % 및 다른 와일드 카드를 따기

b를 ... 나도 그것을 원하지 않습니다.

+0

당신이하려는 일에 대한 몇 가지 예를 들려 줄 수 있습니까? 일치 시키거나 캡처하고 싶습니까? 사용자가 문자 그대로 "%"또는 "*"를 입력했는지, 아니면 나중에 아무 것도 입력하지 않는다는 의미입니까? – Eli

답변

1

설명

이 정규식 공백 등의 텍스트 또는 라인의 끝 뒤에 W N, S, E, 만 거리와 일치한다.

^([nsew])\b(?:\s.*?)?$

enter image description here

  • 그룹 0은 전체 매칭 값
  • 그룹 1 수신처 단지 N, S, E 또는 W

    N 위스콘신 드라이브 수신처 S 유권자 부스 E Kitten Ave W 워싱턴 거리,210 Noghtington 레인 실버 스톤 드라이브 Edans 고속도로 Wireware Waythrough

당신은 언어를 지정하지 않은, 그래서 정규식을 데모하기 위해 PHP를 들었다.

<?php 
$sourcestring="N Wisconsin Drive 
S Voter Booth 
E Kitten Ave 
W Washington Street 
Noghtington Lane 
Silver Stone Drive 
Edans Expressway 
Wireware Waythrough"; 
    Dim re As Regex = New Regex("^([nsew])\b(?:\s.*?)?$",RegexOptions.IgnoreCase OR RegexOptions.Multiline) 
    Dim mc as MatchCollection = re.Matches(sourcestring) 
    Dim mIdx as Integer = 0 
    For each m as Match in mc 
     For groupIdx As Integer = 0 To m.Groups.Count - 1 
     Console.WriteLine("[{0}][{1}] = {2}", mIdx, re.GetGroupNames(groupIdx), m.Groups(groupIdx).Value) 
     Next 
     mIdx=mIdx+1 
    Next 
    End Sub 
End Module 

$matches Array: 
(
    [0] => Array 
     (
      [0] => N Wisconsin Drive 
      [1] => S Voter Booth 
      [2] => E Kitten Ave 
      [3] => W Washington Street 
     ) 

    [1] => Array 
     (
      [0] => N 
      [1] => S 
      [2] => E 
      [3] => W 
     ) 

) 
+0

정말 고마워요! – devfunkd

+0

N/A를 입력하면 항상 작동하는 것처럼 보일뿐입니다. 그러나 N 위스콘신 드라이브로 들어가면 원하는 결과가 N 문자 일 때도 전체 거리 이름을 선택합니다. 도움? – devfunkd

+0

샘플 텍스트에 'N % oghtington Ave'와 같은 값이 들어 있다고 하시겠습니까? 아니면 사용자가'N %'을 검색하고'N '으로 시작하는 모든 값을 기대하기 때문에 사용자가 제공하는 문자열이 먼저 정리되어야한다고 말하고 있습니까? –

0

^ "이 아닌"문자열의 시작 부분입니다. 부정적인 견해를 가지고이를 할 수 있습니다.

[NSWE](?!%|\*) 
0

사용자가 검색 표현식을 입력하는 것처럼 들리는군요. 그런 다음 당신은 정규 표현식 함수에 직접 전달하여 검색 용어에 대해 행동하려고합니다.

사용자가 %에 의해 모든 문자의 수 있지만 정규식 엔진은 단순히 % 문자를 살펴보고 그것을 일치 시키려고를 뒤에 N를 찾기 위해 기대 N%를 입력하면

.당신은 정규 표현식으로 사용하기 전에 다음 중 하나와 %를 대체하여 사용자가 제공하는 검색 용어를 해결할 수 있습니다 라인에

  • .* 욕심이 일치하는 모든 나머지 문자가 아닌 욕심과 일치하는 번호로
  • .*? 문자
  • .는 단일 문자 같은 사용자가 *를 입력 한 경우 수행 될 필요가

하였습니다.

면책 조항 : 정규식 함수에서 사용되는 옵션에 따라 .은 새 줄과 일치하거나 일치하지 않을 수 있습니다. 사용자 기반에 따라 검색 용어가 정규 표현식 구문을 준수해야한다고 사용자에게 알리는 것이 더 나을 수도 있습니다. 이것은 익숙한 사용자가 자신의 비밀 식을 구축 할 수있게합니다.