2013-10-08 2 views
0

Я пытаюсь получить значение атрибута значение, которое может быть любым целым числом, включая те, меньше нуляНе удается захватить группу в регулярном выражении

val source = """...some noise .... <input type="hidden" name="myId" id="myId" value="1234"/> ...some noise ....""" // or value="-5678"/> 

val regex = """<input type="hidden" name="myId" id="myId" value="([-?\\d+])"/>""".r 
regex findAllIn source 

И я получаю scala.util.matching.Regex.MatchIterator = empty iterator

ответ

2

Ваше регулярное выражение не работает так, как вы думаете. Он соответствует - или ? или \ или d или +. Вы поместили все в character class. Вы должны использовать:

(-?\d++) 

Как вы используете рубец цитату Scala вам не нужно дважды бежать \.

+0

Да, сейчас он работает. но не работает []? –

+0

@Grienders, что вы имеете в виду? '[]' является группой символов и работает как таковой, вы просто злоупотребляете им. –

+0

Не могли бы вы объяснить, почему '([-? \ D +])' не работает? –

0

Изменить эта часть:

([-?\\d+]) 

к:

(-?\\d+) 
+0

То же самое. –

1

Как и то, что говорит @ M42 (удалите квадратные скобки), вы хотите удалить одну из обратных косых черт перед маркером цифры - помните, что вы находитесь внутри строки «тройной кавычки» - вам не нужно обратная косая черта:

(-?\d+) 
+0

Это должен быть комментарий к ответу @ M42, поскольку он не является полным автономным ответом. Если ответ, на который он ссылается, удаляется, он становится бесполезным. –

+0

Отредактировано, чтобы кратко отметить, что говорит M42 (последний фрагмент, который я даю, по-прежнему можно использовать без этой информации). Однако я буду помнить это о будущем, спасибо @BoristheSpider. – Shadowlands

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