如何设计一个带有单个 OR 条件的正则表达式来检查模式的开始和结束?

How to design a regex with a single OR condition that checks the beginning and end of a pattern?

我想为密码创建一个正则表达式,用户在其中表示他们的号码是一个带有单词的密码,在代码之前有一个双冒号,或者在单词之后有一个散列。所以我希望接受以下两项:

code: 1234567
123567#

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

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

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

当我想说 前缀词或末尾的哈希值 + 密码。后者可能吗?

您可以只使用字符串操作而不是带有一点扩展名的正则表达式:

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