匹配非单词字符,直到找到非单词字符为止

Match non-word characters until enclosing non-word characters if found

我想从字符串的开始和结束位置匹配任何非单词字符,但是如果它遇到了一个包含字符串的非单词字符,我希望它在它之前停止匹配。

我创建了以下正则表达式模式:

^\W+(?!(\W+)((?!).)+)?

我希望它匹配如下图所示,因为它会匹配字符串开头的任何非单词字符,直到它到达负前瞻模式中的封闭引号:

但结果是这样的:

Regex101 Demo

我做错了什么?

你需要使用

^\W*?(\W)(?=.*?\b\W*$)

regex demo详情:

  • ^ - 字符串开头
  • \W*? - 零个或多个非单词字符,尽可能少
  • (\W) - 捕获到第 1 组的非单词字符
  • (?=.*?\b\W*$) - 与紧随其后的位置相匹配的正面前瞻
    • .*? - 除换行字符外的任何零个或多个字符,尽可能少
    • \b - 单词边界
    • </code> - 与第 1 组相同的值</li> <li><code>\W* - 零个或多个非单词字符
    • $ - 字符串结尾。