2016-11-11 2 views
1

я изо всех сил, чтобы сделать регулярное выражение, которое извлечения цифр bettween последнего набора скобок из строки, и это то, что я пришел с до сих пор:Regex найти цифры между последним набором скобок

^.*?\([^\d]*(\d+)[^\d]*\).*$ 

Например:

This is, (123456) a string (78910); 

возвращает 123456, который является большим, но мне это нужно, чтобы посмотреть на последний набор и вернуть 78910.Also, я хочу, чтобы регулярное выражение, чтобы игнорировать все, кроме цифр:

This is, (123bleah456) a string (789da10); 

Если вернуться: 78910

UPDATE

Использование регулярных выражений:

(\d+)(?!.*\d) 

Для строки:

Telefon Mobil (123)Apple iPhone 6 128GB Gold(1567)asd234 

вернется 234, когда он должен быть 1567

Rubular

+0

* Wiktor Stribiżew закрыл этот вопрос, потому что он думает, что это дубликат * - ** Это был дубликат **. '(\ d +) (?!. * \ d)' хорошо работал с приведенными вами примерами. Теперь вы говорите, что цифры, которые вам нужны, находятся внутри последнего '(...)'. Конечно, это совсем другая история. –

+0

@ WiktorStribiżew, если бы вы прочли его ближе, вы бы увидели, что я сказал, что с самого начала это не совсем другая история, даже в названии упоминается, что цифры находятся между круглыми скобками. Я удалил свой комментарий, хотя это не было оскорбительным вообще, оно отражало ваше действие. Вы отметили как дублирующий вопрос, который был не везде рядом с этим. –

+0

Тем не менее, ответ почти такой же - ['\ ((\ d +) \) (?!. * \ (\ d + \)) '] (https://regex101.com/r/8jgAfp/1) –

ответ

1

Вы можете извлечь последнюю при использовании greed:

.*\(\K\d+ 

See demo at regex101

\K resets начало отчетного матча.

Для вашего более конкретного обновленного случая слегка модифицируйте регулярное выражение и вычеркните ненужные цифры.

$str = "This is, (123bleah456) a string (789da10);"; 

if(preg_match('/.*\(\K\d[^)]*/', $str, $out)) 
    $res = preg_replace('/\D+/', "", $out[0]); 

See demo at eval.in

+0

Это здорово, но что, если мой paranthese содержит что-то вроде этого (123mda2456). В этом случае мне также нужно извлечь только числа 123456.Как бы Вы это сделали? –

+0

boblbebubble: * [https://regex101.com/r/8jgAfp/2] возвращает последний набор цифр внутри parenthese, но мне нужно, чтобы все цифры внутри были извлечены, например: '(123mda456)' result: '123456' . * –

+0

@PeterCos В этом случае используйте что-то вроде '. * \ (\ K \ d [^)] *' и разделите нецифровые символы на 'preg_replace' и' \ D + 'на результат' $ out [0] '. –

Смежные вопросы