簡體   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