我需要能夠匹配一系列數字(1
和9
之間的任意數字),並且與用戶輸入的位數一樣多,但不匹配重複。使用正則表達式匹配一系列數字1-9,無重複
123456789 - >匹配
1223 - >不匹配
在效果上,數必須是1和9之間的位長,只包含數字,並且不重複任何數字。
我該如何使用正則表達式?
我需要能夠匹配一系列數字(1
和9
之間的任意數字),並且與用戶輸入的位數一樣多,但不匹配重複。使用正則表達式匹配一系列數字1-9,無重複
123456789 - >匹配
1223 - >不匹配
在效果上,數必須是1和9之間的位長,只包含數字,並且不重複任何數字。
我該如何使用正則表達式?
類似下面應該工作:
(?!.*([1-9]).*\1)^[1-9]{1,9}$
(?!.*([1-9]).*\1)
- 負先行檢查,如果數字不重複。
^(?:([1-9])(?!\1))+$
也就是說,一個數字,後面的東西是不一樣的數字,至少一次。
對不起,誤解了問題。我以爲你的意思是,如果連續使用兩次相同的號碼,它就會失敗。如果你想不重複的數字的整個序列,使用方法:
^(?:([1-9])(?!.*\1))+$
老實說,我用比C#更多的PHP,但這應該工作
^(?:([1-9])(?![1-9]*?\1))*$
這裏是一個不同解決方案。我就是這樣做的。除非讓代碼變得更加簡單,否則我不是一個超級looka/lookbehinds的粉絲。
string numbers = "123456789";
string example = "12345 1123456 19283741 987654321";
var matches = Regex.Matches(example, @"\d+");
for (int i = 0; i < matches.Count; i++) {
var match = matches[i].Value;
if (!numbers.Any(number => match.Count(x => x == number) >= 2)) {
Console.WriteLine(match);
}
}
如果你運行它,你會看到它打印:
12345
987654321
我認爲這是非常簡單的,我在這裏做什麼。
我從文本中提取所有的數字,不管它是否有重複的數字,然後,對於每個數字(1 - 9
),它將只包含那些不包含多個重複的匹配。
數字是否必須排序? – Vache 2011-05-27 01:13:32
不,沒有訂單。 – 2011-05-27 01:14:03