我正在努力使用正则表达式来检测是否有一个特殊字符(hashtag#))在字符串中只包含一次。标签前后的所有内容都是未知的,可以是任何符号(包括空格和特殊字符)。
例子:
#
matches
##
不匹配
a12bc#1def65
matches
a12bc##1def65
不匹配
a234341#1212
matches
a23$. 4341#1 ._21&2
matches
#a23$. 4341#1 ._21&2#
不匹配
我认为这将是安静的简单(我在正则表达式不是很好),所以我尝试
#{1}
令人惊讶的是,这并没有像我预期的那样工作。这个正则表达式也匹配字符串##
。然后我尝试了一些像#{1}b
和(#{1}b|[^#{2}])
这样的东西。但每次字符串#
不匹配或##
匹配正则表达式。
模式#{1}b
可以写成#b
,并且只有在后跟单词边界时才匹配#
。这不会考虑整行中出现的次数。
此模式(#{1}b|[^#{2}])
与之前相同,后跟一个替换|
和可以匹配除#
{
2
}
以外的单个字符的否定字符类[^#{2}]
如果您不想匹配换行符,则匹配整个字符串:
^[^rn#]*#[^rn#]*$
^
字符串 起始[^rn#]*
可选地匹配任何字符,除了换行符或#
[^rn#]*
可选地匹配任何字符,除了换行符或#
$
字符串结束
#
匹配#
字符regex演示