Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: помогите создать регулярное выражение для поиска нужной последовательности цифр
Форумы портала PHP.SU » PHP » Регулярные выражения » помогите создать регулярное выражение для поиска нужной последовательности цифр

Страниц (1): [1]
 

1. dandyman - 31 Января, 2014 - 18:36:05 - перейти к сообщению
Помогите с регуляркой, а то я уже зашёл в тупик.
Использую прогу FileLocator Pro для поиска нужного текста в большом количестве документов Word

нужно создать регулярное выражение для поиска чёткой последовательности цифр, кторая попадается в пределах одной строки.

Пример:
Нужно найти последовательность цифр 1112233

Нужно чтобы при этом находились строки следующего вида:
1112233
111 22 33
111-22-33
1-112-233
1 1 12 2 3
1ajvhымик1 амкм1ипвм2ипир2иптпамвс3у3
маувсувас11аувувс 1апвсв2епеп2мамв33
62541 11 2 2336745


а пропускались следующие:

111452233


То есть любые символы, пробелы и буквы в промежутках между цифрами в искомой последовательности должны игнорироваться, а если в середине присутствуют какие либо левые цифры, то строка пропускается.
2. IllusionMH - 31 Января, 2014 - 19:15:26 - перейти к сообщению
dandyman, что-то вида
CODE (htmlphp):
скопировать код в буфер обмена
  1. '/1(?:\D)*?1(?:\D)*?2(?:\D)*?2/im'


для приведения строки с цифрами к такому виду, можно попробовать так
PHP:
скопировать код в буфер обмена
  1. $initial = '1112233';
  2. $regexp = '/'.implode('(?:\D)*?', str_split($initial)).'/im';
3. LIME - 31 Января, 2014 - 21:19:21 - перейти к сообщению
IllusionMH маленько ошибся
забыл добавить крайние значения
могут тоже быть не цифры
(Добавление)
и вопрос
строка ограничена ли началом и концом
наверняка да
тогда надо и ^ $ добавить
(Добавление)
и непонятно зачем подшаблоны
почему не тупо \D
(Добавление)
вобщем чтоб не разводить много слов
не проверял
PHP:
скопировать код в буфер обмена
  1. $regexp = '/^\D?*'.preg_quote(implode('\D*', str_split($initial))).'$D?*/imU';
4. IllusionMH - 31 Января, 2014 - 21:47:11 - перейти к сообщению
LIME, конец рабочего дня был, и изначально другая задумка насчет подшаблона была, потом понял что можно ж просто не цифру, а подшаблон убрать забыл. Ну и жадность тоже по привычке убрал, хотя в данном случае это лишнее.
dandyman пишет:
нужно создать регулярное выражение для поиска чёткой последовательности цифр, кторая попадается в пределах одной строки.

Насчет краев в условии ничего не говорилось, так что отсавил как есть - без ограничений на начало/конец строки и символы перед ними. Если в строке есть эта последовательность цифр, тогда моя регулярка сработает.
5. LIME - 31 Января, 2014 - 21:48:58 - перейти к сообщению
IllusionMH весч в том что с краев могут быть символы
я об этом
это в примерах есть
(Добавление)
а если с краев циферы то будет тру или нет
потому и вопрос выше
ну мы уже дофига ответили
разберется
(Добавление)
а не...сам невнимательно
в примерах есть цифры с краев
тогда вполне верно было...ну и ладно)
6. dandyman - 31 Января, 2014 - 22:12:16 - перейти к сообщению
да, с краёв могут быть символы.
Попробую по другому объяснить что требуется.
К примеру требуется найти число 6302879, кторое нужно, чтобы обнаруживалось в строке примерно такого вида:edshr63fgfds<0dv2fd(v8fv.bf7v9ауссм
[i]то есть если из этой строки убрать все символы и буквы, а оставить только цифры, то получиться то что надо. Последовательность искомых цифр тоже важна: то есть нужно найти не 9782036 и 6307928 и т.п., а именно 6302879.

а ещё результат мне оказыватся нужен в perl
7. IllusionMH - 01 Февраля, 2014 - 02:12:08 - перейти к сообщению
dandyman, вы вообще пробовали использовать то, что написано выше?
8. dandyman - 01 Февраля, 2014 - 11:33:29 - перейти к сообщению
IllusionMH пишет:
dandyman, вы вообще пробовали использовать то, что написано выше?


пробовал,только я так и не понял, как это использовать в моём случае

подскажите как этот код использовать, на примере если требуется найти такой порядок цифр: 6302879

как мне нужно заполнить поле "Содержит текст"
9. IllusionMH - 01 Февраля, 2014 - 12:04:22 - перейти к сообщению
dandyman, между цифрами вставьте везде \D*
10. dandyman - 01 Февраля, 2014 - 12:30:30 - перейти к сообщению
IllusionMH пишет:
dandyman, между цифрами вставьте везде \D*


не помогло, вообще ничего не нашло
11. IllusionMH - 01 Февраля, 2014 - 13:56:16 - перейти к сообщению
dandyman, как пробовали?
12. dandyman - 01 Февраля, 2014 - 14:40:50 - перейти к сообщению
IllusionMH пишет:
dandyman, как пробовали?


пробовал вводить 1\D*1\D*1\D*3\D*3\D*2\D*2
а так же [1]\D*[1]\D*[1]\D*[3]\D*[3]\D*[2]\D*[2]
13. IllusionMH - 01 Февраля, 2014 - 15:01:47 - перейти к сообщению
dandyman, там в регулярке не нужны случаем / в начале и в конце?
Оно вообще группу \D понимает? можно поробовать \D заменить на [^0-9]
14. dandyman - 01 Февраля, 2014 - 15:40:31 - перейти к сообщению
IllusionMH пишет:
dandyman, там в регулярке не нужны случаем / в начале и в конце?
Оно вообще группу \D понимает? можно поробовать \D заменить на [^0-9]


видимо оно не только группу \D не понимает, а много чго ещё...
Выход нашёл! Воспользовался встроенными средствами самой программы

к примеру для поиска порядка цифр: 1113322

нужно ввести: 1[^[:digit:]]*1[^[:digit:]]*1[^[:digit:]]*3[^[:digit:]]*3[^[:digit:]]*2[^[:digit:]]*2


Всёравно спасибо всем за то что подсуетились

 

Powered by ExBB FM 1.0 RC1