Regex 用于比较字符串和空格的正则表达式

Regex 用于比较字符串和空格的正则表达式,regex,string,Regex,String,我正在尝试比较一个字符串是否存在于使用正则表达式的字符串列表中 我试着用下面的 (?!MyDisk1$|MyDisk2$) 但这不起作用。。。对于以下场景: (?!My disk1$|My Disk2$) 你能建议一个更好的方法来处理这种情况吗 我从sql查询中获取字符串列表。。。所以我不确定空间在哪里。字符串列表各不相同,如My Disk1、MyDisk2、My_Disk3、ABCD123、XYZ_123、MNP 123等。。。。或任何其他带有[a-zA-Z0-9_307;]的字符串,您可

我正在尝试比较一个字符串是否存在于使用正则表达式的字符串列表中

我试着用下面的

(?!MyDisk1$|MyDisk2$)
但这不起作用。。。对于以下场景:

(?!My disk1$|My Disk2$)
你能建议一个更好的方法来处理这种情况吗


我从sql查询中获取字符串列表。。。所以我不确定空间在哪里。字符串列表各不相同,如My Disk1、MyDisk2、My_Disk3、ABCD123、XYZ_123、MNP 123等。。。。或任何其他带有[a-zA-Z0-9_307;]

的字符串,您可以使用零或一个量词(
)使空格可选:

此断言将拒绝子字符串,如
MyDisk2
MyDisk2
。或者要处理可能多的空格,请使用零个或多个量词(
*
):

请注意,如果在忽略模式中空白的引擎中运行此命令,则可能需要使用字符类,如下所示:

(?!My[ ]*disk1$|My[ ]*Disk2$)
(?! *M *y *d *i *s *k *1$| *M *y *D *i *s *k *2$)
或处理空格或下划线:

(?!My[ _]*disk1$|My[ _]*Disk2$)
(?![ _]*M[ _]*y[ _]*d[ _]*i[ _]*s[ _]*k[ _]*1$|[ _]*M[ _]*y[ _]*D[ _]*i[ _]*s[ _]*k[ _]*2$)
不幸的是,如果空格可以位于字符串中的任何位置(但您仍然关心按顺序匹配其他字母),则必须执行以下操作:

(?!My[ ]*disk1$|My[ ]*Disk2$)
(?! *M *y *d *i *s *k *1$| *M *y *D *i *s *k *2$)
或处理空格或下划线:

(?!My[ _]*disk1$|My[ _]*Disk2$)
(?![ _]*M[ _]*y[ _]*d[ _]*i[ _]*s[ _]*k[ _]*1$|[ _]*M[ _]*y[ _]*D[ _]*i[ _]*s[ _]*k[ _]*2$)
但老实说,在这一点上,您最好在尝试使用正则表达式之前对数据进行预处理。

您可以这样做:

/(?[^\s_-]+(\s|_|-)?[^\s_-]*?$)/i
“?”量词表示前面模式的0或1。 /我支持不区分大小写。分隔符可以是空格、下划线或破折号。我已将我的和磁盘替换为不包含空格、下划线或破折号的长度为1或更多的字符串。。现在它将匹配“Shikhar Subedi”、“dprpradeep”或“MyDisk 54”


+量词表示1个或多个。^意思不是。*表示0或更多。因此空格后的字符串是可选的

使用此
Regex
在末尾倒立i,这意味着您的
Regex
不区分大小写

/my\s?disk[12]\$/i

这将匹配所有可能的场景。

我必须将“我的磁盘”和“我的磁盘”作为单独的字符串处理。。我从sql查询中得到字符串列表。。。。所以我无法知道空格在哪里,直到我得到一个字符串列表。。。字符串可以像。。My Disk1、MyDisk2、My_Disk我从sql查询中获取字符串列表。。。。所以我不能知道空间在哪里,但是我不能知道空间在哪里。。。我从sql查询中获取字符串列表。字符串可能会有所不同,如'Shikhar Subedi'、'dbpradeep123'、'tom_hanks'、'Disk 54'等。它就像一个带有空格的电子邮件名称列表。。。我需要检查新字符串是否不在该列表中。我已更改答案。请参阅我更新的答案