簡體   English   中英

當開頭或結尾為空時,正則表達式不匹配

[英]Regex not matching when the start or end are empty

這是我將其輸入到Java文件中的正則表達式。

String myRegex = "(?<=[^a-zA-Z0-9])(target)(?=[^a-zA-Z0-9])";

如果我有如下字符串:

.target. - 有用。

但是,如果我有一個只是說target的字符串,它將不起作用。 如何修改正則表達式,以便如果字符串的開頭或結尾沒有任何內容,則它仍然匹配?

編輯-示例。

_target應該成功!

target_應該成功!

target -應該成功!

當前,這些示例在當前的正則表達式下失敗。

問題是,這里有兩個負面因素。 我的后顧之憂可能是負面的,而我的角色類別可能是負面的。 目前,我的后顧之憂是積極的,而我的角色類別是消極的。 所以說:“回頭,確保找到不在這些類之內的東西”。 因此,當您什么都沒有時,它將找不到並會失敗。 解決的辦法是使我的目光投向負面,並使角色類為正面。 所以現在說的是“回頭看看,確保沒有這些字符”。 因此,如果為空,則不會失敗,因為它符合條件。

這是最終的正則表達式:

String myRegex = "(?<![a-zA-Z0-9])target(?![a-zA-Z0-9])";

使用正則表達式替代 (例如|是邏輯“或”),將“輸入開始”添加到后面的外觀中,並將“輸入結束”添加到前面的外觀中:

String myRegex = "(?<=^|[^a-zA-Z0-9])target(?=[^a-zA-Z0-9]|$)";

正則表達式的問題在於,后面的外觀要求前面的字符不是字母/數字。

這些環顧四周也匹配輸入的開始/結束。

觀看現場演示

如果我正確理解了您的問題,則可以使用?來代替使用前瞻和后視? 指示在“目標”之前和之后應該有0或1個非字母或數字字符。

([^a-zA-Z0-9])?(target)([^a-zA-Z0-9])?

您應該能夠使用* 0或更多的量詞來匹配目標,以匹配出現0個或更多所需字符的任何目標。 所以:

[_]*(target)[_]*

應該匹配:

_target
target
target_
_target_

將想要匹配的任何元素添加到方括號之前或之后。 匹配.target. 太:

[\._]*(target)[\._]*

無論它是字符串的哪一部分,都將匹配目標子字符串。 如果您只想在字符串開頭設置匹配規則,則將^錨添加到該字符串中,如下所示:

^[\._]*(target)[\._]*

並且僅當它們以字符串開頭時才會匹配上述內容。

暫無
暫無

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

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