我有正则表达式:
\[[^\[\]]*\]\s*[<>|<=|>=|=|>|<]\s*'?"?\w*'?"?
这基本上只是解析一个等式:
[household_roster_relationships_topersona_nameadditionalpersono] = "1"
它很好用,
'=','>','<'.
但是当方程有
时'<=','>=','<>'.
解析停在
的第一个字符处'<=','>=','<>'.
我创建了一个演示on regex101
如何更正正则表达式以便在这种情况下正常工作?
答案 0 :(得分:2)
只需更改您的char类进行更改:
Public Function PopUp()
Dim strSQL As String
Dim rs As DAO.Recordset
Dim db As DAO.Database
strSQL = "SELECT PopUpReminders.*, PopUpReminders.ReminderCompletion, PopUpReminders.ReminderStartDate, PopUpReminders.Employee FROM PopUpReminders WHERE (((PopUpReminders.ReminderCompletion)=False) AND ((PopUpReminders.ReminderStartDate)<=Now() AND ((PopUpReminders.Employee)='" & Forms![Login]![txtUserName] & "'));"
Set db = CurrentDb
Set rs = db.OpenRecordset(strSQL)
If rs.RecordCount = 0 Then
'Do Nothing
Else
If rs.RecordCount > 0 Then
Do
DoCmd.OpenForm "SFPopUpReminder"
Loop Until rs!ViewedRecord = True
End If
End If
rs.Close
Set rs = Nothing
End Function
答案 1 :(得分:1)
您需要使用分组构造替换字符类。
使用
\[[^[\]]*]\s*(?:<>|[<>]=|[=><])\s*['"]?\w*['"]?
^^^ ^
请参阅regex demo。 (?:<>|[<>]=|[=><])
非捕获组(仅用于分组子模式)与<>
,<=
,>=
,=
匹配, >
或<
。
注意我减少了一些替代分支以使模式更紧凑。另外,我认为您最后只想匹配'
或"
,因此,仅仅['"]?
(1或0 '
或"
)应该够了。
此外,您无需转义字符类中的[
([[]
匹配单个[
),并且您无需在]
之外转义]
字符类,它匹配文字$_SERVER
符号。
答案 2 :(得分:0)
您需要使用()
代替[]
来进行多字词类选择... see updated regex