簡體   English   中英

grep regex lookahead或字符串的開頭(或lookbehind或字符串的結尾)

[英]grep regex lookahead or start of string (or lookbehind or end of string)

我想匹配一個字符串,該字符串可能在匹配之前包含一種字符,或者匹配可以從字符串的開頭開始(對於字符串的結尾也是如此)。

對於一個最小的例子,考慮文本nb ,我想在一行的開頭和一行的結尾或兩個非單詞字符之間或某種組合中匹配。 最簡單的方法是使用單詞邊界( \\bn\\.b\\.\\b ),但這不匹配; 類似的情況發生在其他所需的匹配中,其中包含非單詞字符。

我正在使用(^|[^\\w])n\\.b\\.([^\\w]|$) ,它工作得很滿意,但也會匹配出現的非單詞字符(如破折號)緊接着這個詞之前和之后,如果有的話。 我在grep中這樣做,所以雖然我可以很容易地將輸出管道--color到sed,但我使用的是grep的--color選項,它在管道輸入另一個命令時被禁用(原因很明顯)。

編輯: \\K選項(即(\\K^|[^\\w])n\\.b\\.(\\K[^\\w]|$)似乎有效,但它也會丟棄匹配上的顏色在輸出中。雖然我可以再次調用輔助工具,但如果有一個快速而簡單的解決方案,我會喜歡它。

編輯:我誤解了\\K運算符; 它只是在使用前刪除匹配中的所有文本。 難怪它沒有為輸出着色。

如果你正在使用grep,你必須使用-P選項,或者看起來和\\K會拋出錯誤。 這意味着您也可以使用負面的外觀。 這是你的正則表達式的簡單版本:

(?<!\w)n\.b\.(?!\w)

另外,請注意(?<=...)(?<!...)lookbehinds(?=...)(?!...)前瞻 你的標題的措辭暗示你可能已經把那些混亂,一個普通的初學者的錯誤。

在lookahead / lookbehinds內部顯然可以匹配字符串的開頭; 那么顯而易見的解決方案是(?<=^|[^\\w])n\\.b\\.(?=[^\\w]|$)

暫無
暫無

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

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