簡體   English   中英

Java:匹配正則表達式,除非以任意后綴結尾

[英]Java: Match Regex unless ending with arbitrary suffix

我要做什么:

使用Java,我要匹配一個RegEx模式,除非匹配后緊跟一個“毒葯”后綴。

Exemples:

 "legitString" RETURNS "legitString"

 "legitString blabla" RETURNS "legitString"

 "legitString PoisonousSuffix" RETURNS "legitString"

 "legitStringPoisonousSuffix" RETURNS no match

我的用例:

我需要按照特定的模式從文件中解析盡可能多的引用。 但是文件的某些行會被截斷,並且不一定總是相同的長度(!)。

幸運的是,發生這種情況時,該行以“ >>”結尾。 我必須假定該引用被截斷,並且必須丟棄它。 因此,在我的情況下,“ >> $”將是有毒的后綴。 另一方面,如果“ >>”位於文本中間,則應像平常一樣安全地提取引用。 (參考號以數字結尾,但是每次的數字位數可以不同,所以我不能使用它。)

因此,就我而言:

"REF" RETURNS "REF"

"REF >>" RETURNS "REF"

"REF>>" RETURNS nothing

"REF>> bla " RETURNS "REF" // because in my case, the poison is only poisonous if in the end

我看過: https : //stackoverflow.com/tags/regex/info但我嘗試了語法

myRegex(?!>>$)

它看起來是錯誤的。 當行以“ >>”結尾時,它將截斷引用的最后一個合法數字,這是最壞的情況:引用已損壞。

我已經看到:正則表達式的字符串不是以給定的后綴結尾,而是:

myRegex(?:(?!>>).).$

拒絕合法引用。

我確切的正則表達式(無毒):

   \b(SWN-)?WZ-SB\d{2}(-\d{2}){2}-[A-Z]?\d* 

應該為以下內容返回SWN-WZ-SB00-49-03-C11:

"SWN-WZ-SB00-49-03-C11>> bla"

"SWN-WZ-SB00-49-03-C11 >>  "

"SWN-WZ-SB00-49-03-C11 >>"

"SWN-WZ-SB00-49-03-C11 >> bla"

並沒有:

"SWN-WZ-SB00-49-03-C11>>"

獎金

有沒有一種方法可以概括並讓函數接受regexPattern和poisonousSuffix並返回safeRegexPattern?

謝謝

做到這一點的正確方法是使用條件。 這是我使用的模式。

(?(?![\\w-]+>>$)(?:([^\\s>]*)(?:.*))|([^\\w\\W]))

我將為您提供細分:

(?...)if有條件

(?![\\w-]+>>$)檢查字符串是否包含有毒的后綴

(([^ \\n>]*)(?:.*))捕獲所有內容,直到遇到某個空格或>

| 要么

([^\\w\\W])捕獲任何內容。

因此,if條件的語法為(?If(condition)then | else)。 此模式的作用是,如果字符串不包含后綴,則將字符串返回到第一個空格為止,但是如果包含后綴,則不匹配任何內容。

演示

暫無
暫無

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

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