Regex 不包括连字符的正则表达式字边界 我需要一个正则表达式,该表达式与一个单词边界结束的表达式匹配,但是它不把连字符作为边界来考虑。 i、 e.使所有表达式与 type ([a-z])\b

Regex 不包括连字符的正则表达式字边界 我需要一个正则表达式,该表达式与一个单词边界结束的表达式匹配,但是它不把连字符作为边界来考虑。 i、 e.使所有表达式与 type ([a-z])\b,regex,Regex,但不匹配,例如 type a-1 换言之:我想要一个单词边界操作符\b的等价物,它不使用单词字符类[A-Za-z0-9\],而是使用扩展类:[A-Za-z0-9\-]您可以对此使用前瞻,最短的是使用负前瞻: type ([a-z])(?![\w-]) type ([a-z])(?=[^\w-]|$) (?![\w-])表示“如果下一个字符在\w中或是-中,则匹配失败” 以下是一个使用常规前瞻的选项: type ([a-z])(?![\w-]) type ([a-z])(?=[^\w-]|

但不匹配,例如

type a-1

换言之:我想要一个单词边界操作符\b的等价物,它不使用单词字符类
[A-Za-z0-9\]
,而是使用扩展类:
[A-Za-z0-9\-]

您可以对此使用前瞻,最短的是使用负前瞻:

type ([a-z])(?![\w-])
type ([a-z])(?=[^\w-]|$)
(?![\w-])
表示“如果下一个字符在
\w
中或是
-
中,则匹配失败”

以下是一个使用常规前瞻的选项:

type ([a-z])(?![\w-])
type ([a-z])(?=[^\w-]|$)
您可以将
(?=[^\w-]|$)
读取为“仅当字符类
[\w-]
中的下一个字符是而不是时匹配,或者这是字符串的结尾”


<>工作:

我有一个非常相似的问题,除了我不想把“*”当作边界字符。以下是我所做的:

\b(?<!\*)([^\s\*]+)\b(?!*)

您使用的正则表达式引擎是什么--这是.NET、javascript等吗?您的正则表达式具有无效的语法结构。如果您还希望匹配空格而不是单词的结尾或开头,则必须在美元周围添加括号,即([a-z])(?![\w-])|($|\s)。在我的例子中,我想从8位数字开头和结尾的单词边界中排除连字符。常规的体验看起来像是再搜索(r)(((![-\w])|(\s| ^))(\d{8})((?![-\w])|(\s| ^)),“-12345678”)