我无法找出正在寻找的正确的正则表达式。基本上我需要的是以下内容。
如果用户搜索街道前缀(例如N W E S)并包含正则表达式忽略它的通配符(%,*)。我只希望正则表达式与N W E S一起使用。
那么如何编写正则表达式,如果你旁边有一个角色则忽略。这就是我到目前为止所拥有的。
^(N | S | W | E)\ B'/ P>
但它正在拿起N%和其他通配符......我也不想要它。
答案 0 :(得分:1)
此正则表达式仅匹配具有N,S,E,W的街道,后跟空格和更多文本或行尾。
^([nsew])\b(?:\s.*?)?$
第1组只会收到N,S,E或W
N Wisconsin Drive S选民摊位 E Kitten Ave. W华盛顿街 诺格廷顿巷 银石驱动器 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
)
)
答案 1 :(得分:0)
^
是字符串的开头而不是&#34;不是。&#34;你可以用负面的预测来做到这一点。
[NSWE](?!%|\*)
答案 2 :(得分:0)
从您的问题来看,听起来您允许用户输入搜索表达式。然后,您尝试通过将其直接传递到正则表达式函数来对搜索项进行操作。
如果用户输入N%
期望查找N
后跟%
任意数量的字符,但正则表达式引擎只需查看%
字符并尝试匹配它。您可以在将%
用作正则表达式之前将其替换为.*
,从而更正用户提供的搜索字词:
.*?
贪婪地匹配线上所有剩余的字符.
非贪婪匹配任意数量的字符*
匹配任何单个字符如果用户输入.
。
免责声明:根据正则表达式函数{{1}}中使用的选项,可能与新行匹配也可能不匹配。根据您的用户群,最好只是告诉用户搜索词需要遵循正则表达式语法。这将允许知识渊博的用户建立自己的深奥表达。