我试图匹配一个单词的最后一个字符。
一个单词是一串非空格字符 '[^\n\r\t\f ]',或者是一个空行 ^$。
我写了一个正则表达式来实现这个功能: "[^ \n\t\r\f]\(?:[ \$\n\t\r\f]\)"
这个正则表达式匹配紧跟着空格字符或行尾的非空格字符。
但我不知道如何防止它从结果中排除以下空格字符,并且为什么似乎无法捕获行尾之前的字符。
使用字符串“Hi World!”,我期望捕获:“i”和“!”。
但实际上我得到的是:“i ”。
我该怎么解决这个问题?
我试图匹配一个单词的最后一个字符。
一个单词是一串非空格字符 '[^\n\r\t\f ]',或者是一个空行 ^$。
我写了一个正则表达式来实现这个功能: "[^ \n\t\r\f]\(?:[ \$\n\t\r\f]\)"
这个正则表达式匹配紧跟着空格字符或行尾的非空格字符。
但我不知道如何防止它从结果中排除以下空格字符,并且为什么似乎无法捕获行尾之前的字符。
使用字符串“Hi World!”,我期望捕获:“i”和“!”。
但实际上我得到的是:“i ”。
我该怎么解决这个问题?
“单词”是由非空白字符序列组成的情况
请注意,在[^ \n\t\r\f](?:[\$\n\t\r\f])
中,非捕获组(?:...)
仍然匹配(消耗)空格字符(因此,它成为匹配的一部分),并且它不会在字符串末尾匹配,因为$
符号不是字符类内的字符串结束锚定符,而是被解析为字面意义上的$
符号。
您可以使用
\S(?!\S)
请查看正则表达式演示
\S
匹配一个非空白字符,该字符后面没有跟随非空白字符(由于(?!\S)
负向先行断言)。
一般的“单词”情况
如果一个单词仅包含字母、数字和下划线,也就是与\w+
匹配,你可以简单地使用
\w\b
\w
匹配一个"单词"字符,并且单词边界断言后面没有单词字符。