如何设计具有单个OR条件的regex,该条件检查模式的开始和结束



我想为密码创建一个正则表达式,用户表示他们的号码是一个密码,密码前有单词和一个冒号,单词后有散列。因此,我希望以下两项都能被接受:

code: 1234567
123567#

然而,由于"#"one_answers"code:"位于模式的两端,我目前的做法是将整个正则表达式重复两次,如下所示。

(?:(?:code|pc|#|participant)[:>]?#?(\d{7,8}(?!\d)))|((?<!\d)\d{7,8})#

我基本上是说前缀词+密码或密码+#

当我想说前缀单词或末尾的散列+密码。后者可能吗?

您可以使用字符串操作,而不是带有一个小扩展名的regex:

extension String {
    func beginsWith (str: String) -> Bool {
        if let range = self.rangeOfString(str) {
            return range.startIndex == self.startIndex
        }
        return false
    }
    func endsWith (str: String) -> Bool {
        if let range = self.rangeOfString(str, options:NSStringCompareOptions.BackwardsSearch) {
            return range.endIndex == self.endIndex
        }
        return false
    }
}

然后:

if(codeString.beginsWith("code:") || codeString.endsWith("#")
     //Something