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