簡體   English   中英

以下正則表達式在說什么?

[英]What is this following regular expression saying?

剛剛遇到以下正則表達式:

Regex.Match(feed.Element("description").Value, @"^.{1,180}\b(?<!\s)").Value

我知道它說從它應該包含最小 1 和最大 180 個字符的任何內容開始\b代表單詞邊界。 我不明白\b在這里做什么。 然后(?<!\s) 那個表情在做什么? ?<! 代表向后看,不消耗字符串。 我的猜測是它說向后看,它不應該以空格結尾。 不過我不確定。 誰能解開這些疑惑。

在 Regexr 上查看您的表達式,這是測試正則表達式的有用工具。

我將最大長度減少到 10 以進行測試。 所以看起來像

^.{1,10}\b(?<!\s)

(?<!\s)是零長度斷言背后的負面看法。 這意味着它檢查之前(左側)的 position 是否不是空格。

因此, ^.{1,10}\b(?<!\s)將匹配字符串前 10 個字符的最后一個單詞邊界,但前提是左側部分或單詞邊界不是空格。 這不僅會匹配“左單詞邊界”(我認為三元組表示單詞的右側),因為單詞邊界不一定包括空格。

單詞邊界\b將匹配單詞字符(由 class \w 定義)和非單詞字符 \W 之間的空字符串。

這意味着\b(?<!\s)將匹配例如“A$”、“A”、“(A”或“.A”之間。它們之間都有一個單詞邊界,而左邊的字符不是一個空格。

在您的情況下(?<!\s)確保匹配中不包含尾隨空格

下面的方法很容易說明。 在您的示例中將 180 更改為 10,因此您不需要很長的測試字符串:

^.{1,10}\b(?<!\s)

現在嘗試匹配以下字符串(注意 2 和 3 之間的兩個空格):

one two  three four

您的正則表達式匹配不會包括二到三之間的兩個空格。 但是,如果您像這樣刪除正則表達式的最后一部分:

^.{1,10}\b

然后兩個之后的兩個空格被包含在匹配中。

基本上,“非空格”斷言強制 \b 僅匹配左字邊界。 換句話說,如果前 180 個字符在第一列之后的任何位置包含一個單詞,則匹配。 (該表達式在匹配之前至少需要一個任意字符——沒有上下文很難說這是否真的正確,以及它應該完成什么。)

暫無
暫無

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

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