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