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