-1

探しているものの正しい正規表現がわかりません。基本的に私が必要とするのは次のとおりです。

ユーザーが NWES などのストリート プレフィックスを検索し、ワイルドカード (%,*) が含まれている場合、正規表現はそれを無視します。正規表現がNWESのみで動作するようにしたいだけです。

では、次の文字がある場合は無視する正規表現をどのように記述すればよいでしょうか。これは私がこれまでに持っているものです。

^(N|S|W|E)\b

しかし、それは N% やその他のワイルドカードを拾っています... 私もそれを望んでいません。

4

3 に答える 3

1

説明

この正規表現は、N、S、E、W の後に空白と追加のテキストまたは行末が続く通りのみに一致します。

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

ここに画像の説明を入力

  • グループ 0 は一致した値全体を受け取ります
  • グループ 1 は、N、S、E、または W のみを受け取ります。

    北ウィスコンシン ドライブ S 投票者ブース E キトゥン アベニュー W ワシントン ストリート ノーティントン レーン シルバー ストーン ドライブ エダンズ エクスプレスウェイ ワイヤーウェア ウェイスルー

言語を指定しなかったので、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
        )

)
于 2013-05-30T05:14:40.387 に答える
0

^その場合は、"not" ではなく文字列の先頭です。否定的な先読みでこれを行うことができます。

[NSWE](?!%|\*)
于 2013-05-29T23:15:46.183 に答える