[英]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.