Хорошо, это немного грязно, сложно: удалите последний символ, чтобы переопределить клавишу ввода пользователя:
// ...
private int _petitionCharStep = 0;
private string _petition = "This is a dummy text";
public string PetitionInput { get; set; } = string.Empty;
void PetitionHandleKeyDown(UIKeyboardEventArgs arg) {
if (_petitionCharStep >= _petition.Length )
{
PetitionInput = _petition.Substring(0, _petition.Length-1 );
_petitionCharStep--;
}
}
void PetitionHandleKeyUp(UIKeyboardEventArgs arg) {
if (_petitionCharStep < _petition.Length )
{
PetitionInput += _petition[_petitionCharStep];
_petitionCharStep++;
}
}
Согласно Генерируют Регулярное выражение для Соответствия Произвольному Числовому Диапазону, и после генерации такого regex для примера в Regex_For_Range:
\b0*(1[1-9][0-9]|[2-9][0-9]{2}|1[0-9]{3}|2[01][0-9]{2}|22[0-2][0-9]|223[0-4])\b
добился бы цели.
Процесс был бы (все еще после что генератор Regex):
Во-первых, ворвитесь в диапазоны равной длины:
110 - 999
1000 - 2234
Во-вторых, ворвитесь в диапазоны, которые приводят к простому regexes:
110 - 199
200 - 999
1000 - 1999
2000 - 2199
2200 - 2229
2230 - 2234
Превратите каждый диапазон в regex:
1[1-9][0-9]
[2-9][0-9]{2}
1[0-9]{3}
2[01][0-9]{2}
22[0-2][0-9]
223[0-4]
Сверните смежные полномочия 10: 1 [1-9] [0-9] [2-9] [0-9] {2} 1 [0-9] {3} 2 [01] [0-9] {2} 22 [0-2] [0-9] 223 [0-4]
Объединение regexes выше урожаев:
0*(1[1-9][0-9]|[2-9][0-9]{2}|1[0-9]{3}|2[01][0-9]{2}|22[0-2][0-9]|223[0-4])
Затем мы попытаемся факторизовать общие префиксы с помощью дерева:
Синтаксический анализ в дерево на основе regex префиксов:
. 1 [1-9] [0-9]
+ [0-9]{3}
+ [2-9] [0-9]{2}
+ 2 [01] [0-9]{2}
+ 2 [0-2] [0-9]
+ 3 [0-4]
Превращение дерева синтаксического анализа в regex уступает:
0*(1([1-9][0-9]|[0-9]{3})|[2-9][0-9]{2}|2([01][0-9]{2}|2([0-2][0-9]|3[0-4])))
Мы выбираем более короткий в качестве нашего результата.
\b0*(1[1-9][0-9]|[2-9][0-9]{2}|1[0-9]{3}|2[01][0-9]{2}|22[0-2][0-9]|223[0-4])\b
Это не вид вещи regexes Excel в. Вы, вероятно, найдете легче гарантировать, чтобы у Вас было правильное количество цифр /^([0-9]{3,4})$/
и затем сделайте дальнейшие проверки по сравнению с получением.
В то время как Вы могли сделать это с некоторым абсурдным взглядом regex (как VonC ответил), regex действительно, как предполагается, не делает это.. Почему бы не задержать проверку числа на перенаправленный к сценарию?
Если бы номера 110-2234 переходят к script1, и 1-109 переходят к script2, было бы намного более просто направить все числа на a router
сценарий, и имеет его перенаправление к корректному местоположению (через перенаправления HTTP)..
В .htaccess
:
RewriteRule ^view/([0-9]+)/?$ router.php?page=$1 [L]
.. затем в router.php
, что-то как:
<?PHP
if(
int($_GET['page']) > 110 &&
int($_GET['page']) < 2234
){
header("Status: 301 Moved Permanently\nLocation: /script1");
}else{
header("Status: 404 Not Found");
}
?>
Это возможно хотя не симпатичный.
\b(?:[1][1][0-9]|1\d{3}|223[0-4]|2[0-1]\d\d|2[0-2][0-3][0-4])\b
Я послал по электронной почте Phillip Hazel, автору PCRE, в 2006 что он думал о математике в regex:
Возможно, это находится из объема проекта в Вашем представлении: способность рассматривать числа, как являющиеся числами и не текстом, это определенно было бы стоящей функцией. Позволяя Вам сделать некоторая основная математика проверяет подобранные цифры, как: 2-я подобранная цифра выше или ниже, третья цифра несколько от 1-х, и намного более сложных случаев, которые я не уточню только для понимания моей мысли через. Вы чувствуете, что это превышает область textmatching?
на который я получил следующий ответ:
Да, я думаю, что делаю, и также, это не что-то, что доступно в регулярных выражениях Perl. Я знаю, что PCRE действительно имеет некоторые расширения от Perl, но ничто столь же главное как тот (Вы могли, возможно, взломать что-то использование выносок, но это будет немного специально, и несомненно чрезвычайно грязно!).
Philip
и я не мог согласиться больше теперь в '09. Просто соответствуйте всем числам и действительно пронумеруйте проверку на любом языке, которому Вы делаете соответствие.