Swift NSPredicate带有正则表达式,返回错误的结果

Swift NSPredicate带有正则表达式,返回错误的结果,swift,regex,Swift,Regex,我编写了以下正则表达式来验证用户名: /^[a-zA-Z0-9\\.\\.+$/ 然而,当我尝试使用它时,有些事情搞砸了,因为它给了我错误的结果。我尝试的输入与我的SO句柄相同:ilikecode。以下是我应用正则表达式的方式: let regex = "/^[a-zA-Z0-9\\._]+$/" let usernameTest = NSPredicate(format: "SELF MATCHES %@", regex) print("username is valid", username

我编写了以下正则表达式来验证用户名:

/^[a-zA-Z0-9\\.\\.+$/

然而,当我尝试使用它时,有些事情搞砸了,因为它给了我错误的结果。我尝试的输入与我的SO句柄相同:
ilikecode
。以下是我应用正则表达式的方式:

let regex = "/^[a-zA-Z0-9\\._]+$/"
let usernameTest = NSPredicate(format: "SELF MATCHES %@", regex)
print("username is valid", usernameTest.evaluate(with: username), username)
但是,正则表达式总是返回false

有人知道这是怎么可能的吗


谢谢

在某些语言中,
/…/
用于分隔正则表达式 模式,将模式与操作和选项分离, 比如说

if ($userName =~ m/^[a-zA-Z0-9\\._]+$/i)
在Perl中。但是,
NSPredicate
(或
NSRegularExpression
)只需要一个模式 作为参数,不包含斜杠

此外,
匹配
操作符的锚点是隐式的,并且
[c]
选项可用于指定不区分大小写的匹配:

let regex = "[a-z0-9\\._]+"
let usernameTest = NSPredicate(format: "SELF MATCHES[c] %@", regex)

不要把图案放在
/…/
@MartinR-haha-jesus里,那花了我30分钟。。。你能回答这个问题吗?我愿意接受!用于定义正则表达式的表达式不太精确。
/
是分隔操作、模式和选项的正则表达式分隔符。由于Swift中有特殊的正则表达式操作方法,因此无需执行任何操作(如
m
匹配,或
s
替换)。选项没有必要,因为您可以使用标志指定它们,或者将它们指定为内联选项(
(?i)
使其不区分大小写,或者
(?m)
使
^
/
$
匹配行的开始/结束)。@WiktorStribiżew:您(当然)是对的!