Может кто-нибудь дать мне пример регулярных выражений, использующих {x} и {x,y}?
Я только что узнал из книги о регулярных выражениях на языке Ruby. Я сделал Google это, но все еще запутался {x}
а также {x,y}
,
Книга говорит:
{x} → Совпадение x вхождений предыдущего символа.
{x, y} → Совпадение не менее чем с x экземплярами и не более чем с y экземплярами.
Кто-нибудь может объяснить это лучше, или привести несколько примеров?
4 ответа
Конечно, посмотрите на эти примеры:
http://rubular.com/r/sARHv0vf72
http://rubular.com/r/730Zo6rIls
/a{4}/
это короткая версия для:
/aaaa/
В нем написано: Совпадение точных 4 (последовательных) символов "а".
где
/a{2,4}/
говорит: Совпадение не менее 2 и не более 4 символов "а".
это будет соответствовать
/aa/
/aaa/
/aaaa/
и это не будет соответствовать
/a/
/aaaaa/
/xxx/
Интервальные выражения
GNU awk именует их как "интервальные выражения" в разделе "Операторы регулярных выражений" своего руководства. Это объясняет выражения следующим образом:
{П}
{П,}
{П, т}
Одно или два числа внутри фигурных скобок обозначают интервальное выражение. Если в фигурных скобках есть одно число, предыдущее регулярное выражение повторяется n раз. Если есть два числа, разделенные запятой, предыдущее регулярное выражение повторяется от n до m раз. Если после запятой стоит одно число, то предыдущее регулярное выражение повторяется не менее n раз:
Руководство также включает в себя следующие справочные примеры:
wh{3}y
Matches ‘whhhy’, but not ‘why’ or ‘whhhhy’.
wh{3,5}y
Matches ‘whhhy’, ‘whhhhy’, or ‘whhhhhy’, only.
wh{2,}y
Matches ‘whhy’ or ‘whhhy’, and so on.
Смотрите также
- Ruby's Regexp class.
- Секция квантификаторов движка онигурума Руби.
Я очень рекомендую http://regexbuddy.com/ и очень кратко, регулярное выражение ниже делает то, на что вы ссылаетесь:
[0-9]{3}|\w{3}
Символы [ ] указывают, что вы должны соответствовать числу от 0 до 9. Это может быть что угодно, но [ ] - буквальное совпадение. { } С 3 внутри означает совпадение наборов из 3 чисел от 0 до 9. The | это или утверждение. \ W - это сокращение для любого символа слова, и снова {3} возвращает только наборы из 3.
Если вы заходите на http://regexpal.com/, вы можете ввести указанный выше код и проверить его. Я использовал следующие данные для проверки выражения:
909 steve kinzey
и выражение соответствовало 909, "ste", "kin" и "zey". Он не соответствует 've', потому что его длина составляет всего 2 слова, а символ слова не занимает пустое пространство, поэтому он не может быть перенесен на второе слово.