我找不出正確的正則表達式我正在尋找。基本上我需要的是以下內容。RegEx與街道前綴和通配符
如果用戶搜索街道前綴(如N W E S)幷包含正則表達式忽略它的通配符(%,*)。我只希望正則表達式只與N W E S一起工作。
那麼我該如何編寫正則表達式來說,如果你旁邊有一個字符,那麼就忽略它。這是我迄今爲止所擁有的。
^(N | S | W | E)\ b
但它拿起N%等通配符......我不希望它太。
我找不出正確的正則表達式我正在尋找。基本上我需要的是以下內容。RegEx與街道前綴和通配符
如果用戶搜索街道前綴(如N W E S)幷包含正則表達式忽略它的通配符(%,*)。我只希望正則表達式只與N W E S一起工作。
那麼我該如何編寫正則表達式來說,如果你旁邊有一個字符,那麼就忽略它。這是我迄今爲止所擁有的。
^(N | S | W | E)\ b
但它拿起N%等通配符......我不希望它太。
此正則表達式僅匹配街道N,S,E,W,接着空格和多個文字或線的端部。
^([nsew])\b(?:\s.*?)?$
組1將收到只是N,S,E,或W
Ñ威斯康辛驅動 S Voter展位 E Kitten Ave 華盛頓街W 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
)
)
^
在這種情況下是字符串的開始而不是「不」。你可以用負面預測來做到這一點。
[NSWE](?!%|\*)
從您的問題,它聽起來像你讓用戶輸入一個搜索表達式。然後,您試圖通過將其直接傳遞給正則表達式函數來對搜索項進行操作。
,如果用戶輸入N%
希望尋找一個N
隨後%
任意數量的字符,但正則表達式引擎僅僅着眼於%
字符,並試圖與之匹敵。您可以使用它作爲一個正則表達式之前更換%
用下面的一個糾正用戶提供的搜索詞:
.*
貪婪的比賽全部上線剩餘的字符.*?
非貪婪匹配任何數量人物.
匹配任何單個字符同樣需要,如果用戶輸入一個*
工作要做。
聲明:根據正則表達式函數.
中使用的選項可能匹配或不匹配新行。根據您的用戶羣,最好告訴用戶搜索字詞需要遵循正則表達式語法。這將允許知識豐富的用戶建立自己的神祕表達。
你能舉一些你想要做什麼的例子嗎?你只是想匹配或捕捉?你的意思是用戶從字面上輸入「%」或「*」,或者說他們之後輸入了什麼? – Eli