匹配非单词字符,直到找到非单词字符为止
Match non-word characters until enclosing non-word characters if found
我想从字符串的开始和结束位置匹配任何非单词字符,但是如果它遇到了一个包含字符串的非单词字符,我希望它在它之前停止匹配。
我创建了以下正则表达式模式:
^\W+(?!(\W+)((?!).)+)?
我希望它匹配如下图所示,因为它会匹配字符串开头的任何非单词字符,直到它到达负前瞻模式中的封闭引号:
但结果是这样的:
我做错了什么?
你需要使用
^\W*?(\W)(?=.*?\b\W*$)
见regex demo。 详情:
^
- 字符串开头
\W*?
- 零个或多个非单词字符,尽可能少
(\W)
- 捕获到第 1 组的非单词字符
(?=.*?\b\W*$)
- 与紧随其后的位置相匹配的正面前瞻
.*?
- 除换行字符外的任何零个或多个字符,尽可能少
\b
- 单词边界
</code> - 与第 1 组相同的值</li>
<li><code>\W*
- 零个或多个非单词字符
$
- 字符串结尾。
我想从字符串的开始和结束位置匹配任何非单词字符,但是如果它遇到了一个包含字符串的非单词字符,我希望它在它之前停止匹配。
我创建了以下正则表达式模式:
^\W+(?!(\W+)((?!).)+)?
我希望它匹配如下图所示,因为它会匹配字符串开头的任何非单词字符,直到它到达负前瞻模式中的封闭引号:
但结果是这样的:
我做错了什么?
你需要使用
^\W*?(\W)(?=.*?\b\W*$)
见regex demo。 详情:
^
- 字符串开头\W*?
- 零个或多个非单词字符,尽可能少(\W)
- 捕获到第 1 组的非单词字符(?=.*?\b\W*$)
- 与紧随其后的位置相匹配的正面前瞻.*?
- 除换行字符外的任何零个或多个字符,尽可能少\b
- 单词边界</code> - 与第 1 组相同的值</li> <li><code>\W*
- 零个或多个非单词字符$
- 字符串结尾。