繁体   English   中英

正则表达式匹配除特定字符外的所有内容

[英]Regex match everything except a specific character

我正在尝试设置一个与以下内容匹配的正则表达式:

*test*
*t*
*te*

但是,我不希望它匹配:

*test**

一般规则是:

  • 必须以行的开头( ^ )或空格字符( \\s )开头
  • 必须只有一个*
  • 可以匹配任何字符
  • 必须再匹配一个*
  • 必须以行尾( $ )或空格字符( \\s )结尾

我生成了以下正则表达式:

(\s|^)\*([^\*].+?[^\*])\*(\s|$)

这几乎可以满足我的要求; 但是,由于第二个捕获组中有两个[^\\*]组,因此似乎要求该捕获组为3个字符或更多。 *tes*匹配,但*t**te*不匹配。

我有三个具体问题:

  1. 为什么字符取反导致3个字符的限制?
  2. 有没有比我在这里表达“除”以外的更好的方法了?
  3. 对更好的正则表达式有什么想法可以满足我的要求?

正则表达式中的问题是额外的. 在捕获组中

[^\*].+?[^\*]
     ^

这将匹配除*以外的字符,然后匹配除换行符以外的任意一个或多个字符。

由于字符类重复两次,因此可以使用+量词来匹配一个或多个字符。

(\s|^)\*([^\*]+?)\*(\s|$)

演示


您也可以使用非捕获组排除额外的匹配项。

(?:\s|^)\*([^\*]+?)\*(?:\s|$)

演示2

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM