2017-07-06 167 views
0

我有割掉字符串如果找到'^',則表示失敗的正則表達式?

(^[0-9]+)|(^\-[0-9]+) 

即第一整數部分與'12x',切片它將返回一個'12'正則表達式。我想擴展它,以便在字符串中存在'^'時失敗。我嘗試使用負向預測

(?!\^)(^[0-9]+)|(^\-[0-9]+) 

但這不起作用,因爲它仍然與例如'12^x'。我也試過之前沒有'\',但它沒有匹配任何東西。我哪裏錯了?

回答

2

這是你的電流負前瞻:

(?!\^) 

這種超前的問題是,它使用了錯誤的模式來實現你想要的。它只是向前看一個字符,這意味着它不能檢查整個字符串,直到結束時纔出現或不出現克拉。

^(?!.*\^)-?[0-9]+$ 

說明:

^(?!.*\^) from the start of the string, look ahead and assert that no carat appears 
-?[0-9]+$ match an optional minus sign, followed by any number of digits 

演示在這裏:

Regex101

+0

謝謝!我在正則表達式中忘記了'''它是非常有用的。儘管我仍然希望它與不僅包含整數的字符串相匹配,但它完美地工作,所以我只是將'$'放在最後。 – user6731064

+0

@ user6731064這對我來說不是很清楚,如果刪除'$'可以修復你的問題,那就盡一切辦法去做。 –

+0

*此外,你已經把它放在正則表達式開始之前* - 這個~~不〜不應該(?)重要;它們都是零寬度斷言,應該能夠以任意順序出現。 – Rawling