2017-07-06 15 views
0

私はそれが'12'を返すスライス、'12x'と列'^'が見つかった場合、正規表現に失敗しますか?

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

すなわち、最初の整数部分をオフにスライスするための正規表現を有しています。文字列に'^'があると失敗するように展開したい。私は否定的な先読みを使用してみました。

(?!\^)(^[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

関連する問題