簡體   English   中英

當一個字符是新行中的第一個字符時,如何修復正則表達式不匹配?

[英]How to fix regex not matching when a character is the first on a new line?

我有一個正則表達式,我用來識別與降價格式規則匹配的文本,用星號包圍。

我確保星號不僅包圍文本,而且星號在文本旁邊。 例如*bold*應該工作而* not bold *應該是* not bold *應該,以避免正常的星號陷入格式化。

這是我的正則表達式: \\*[^ ][^*]+.[^ ]\\*

問題是,這篇文章是一個積極的匹配:

*Test
ing*

這不是:

*Test
g*

兩個示例都應該與表達式匹配。

我正在使用regex101.com進行測試。

有任何想法嗎?

提前致謝!

刪除由@ wiktor-stribiżew評論的點確實解決了問題,但正則表達式可以進一步簡化為\\*\\S[^*]+\\S\\*

請注意,此正則表達式也將匹配**Test**的整個字符串,即它匹配雙星號。 在這種情況下,您沒有指定您的預期行為。

以下正則表達式匹配您的兩個測試用例:

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

另外,網站https://www.freeformatter.com/java-regex-tester.html (我曾經檢查過您的原始正則表達式)也是開發和測試regexp匹配器和替換器的絕佳場所。

點需要匹配至少一個字符,下一個否定字符類必須匹配任何字符,但空格必須匹配。 因此,點失敗,因為g之前有換行符。

采用

\*[^* ](?:[^*]*[^ *])?\*

要么

\*[^*\s](?:[^*]*[^\s*])?\*

這些正則表達式匹配包含至少一個char的星號之間的字符串。

細節

  • \\* - 星號
  • [^*\\s] - 除星號和空格之外的任何一個字符
  • (?:[^*]*[^\\s*])? - 可選的序列
    • [^*]* - 除星號外的零個或多個字符
    • [^\\s*] - 除星號和空格以外的任何字符
  • \\* - 星號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM