операторы break default for return while case do goto sizeof continue else if switch. где Characters есть произвольная комбинация любых печатаемых символов ASCII

О мощи и гибкости регулярных выражений написано много, и их использование давно уже является стандартом для различного рода операций над текстом. Пожалуй, чаще всего регэкспы работают при валидации вводимых данных - здесь им практически нет альтернативы, если не считать громоздкий циклический разбор с кучей неочевидных проверок. Начнём с самого простого:

1. Часть ЧПУ (человекопонятный URL)

По сути, слово с дефисами.

Паттерн: /^+$/

2. Юзернейм

Буквы, цифры, дефисы и подчёркивания, от 3 до 16 символов.

Паттерн: /^{3,16}$/


3. Пароль

То же, что и юзернейм, только от 6 до 18.

Паттерн: /^{6,18}$/



От себя: более кратко - /^[\w_]{6,18}$/ . Аналогично для юзернейма.

4. Шестнадцатиричный цвет

Символ # (необязательно), затем слово, состоящее из букв от a до f или цифр, длиной 3 или 6.

Паттерн: /^#?({6}|{3})$/


5. XML тэг

За открывающей скобкой < должно стоять слово из букв - имя элемента, затем могут быть атрибуты - любые символы, кроме закрывающей скобки >. Далее - любой текст (содержимое) и закрывающий тэг, т.е. <имя />, или как минимум один пробел, слэш и закрывающаю скобка (самозакрывающийся тэг).

Паттерн: /^<(+)([^>]+)*(?:>(.*)<\/\1>|\s+\/>)$/


6. Email

Общий вид - логин@ поддомен. домен. Логин, как и поддомен - слова из букв, цифр, подчёркиваний, дефисов и точек. А домен (имеется в виду 1го уровня) - это от 2 до 6 букв и точек.

Паттерн: /^(+)@(+)\.({2,6})$/



От себя: можно короче - /^([\w\._]+)@\1\.({2,6}\.?)$/ . Это ещё и чуть правильнее - точка в домене первого уровня может встретиться только один раз и только в конце.

7. URL

Первым делом - необязательный протокол (http:// или https://), затем последовательность букв, цифр, дефисов, подчёркиваний и точек (домены уровня > 1), потом домен нулевого уровня (от 2 до 6 букв и точек) и, наконец, файловая структура - набор слов из букв, цифр, дефисов, подчёркиваний и точек со слэшем в конце. Всё это может завершаться опять-таки слэшем.

Паттерн: /^(https?:\/\/)?([\da-z\.-]+)\.({2,6})([\/\w \.-]*)*\/?$/



От себя: лучше так - /^(https?:\/\/)?([\w\.]+)\.({2,6}\.?)(\/[\w\.]*)*\/?$/

8. IP адрес

4 группы цифр (от 1 до 3 цифр в каждой) разделены точками. Если группа состоит из 3 символов, то первый из них - 1 или 2; если 1, то остальные от 0 до 9, а если 2 - то второй от 0 до 5; если второй символ от 0 до 4, то третий - от 0 до 9, а если второй 5 - то третий от 0 до 5. Если же группа состоит из 2 символов, то первый - от 1 до 9, второй - от 0 до 9. В случае односимвольной группы этим символом может быть цифра от 1 до 9.

Паттерн: /^(?:(?:25|2|??)\.){3}(?:25|2|??)$/



От себя: по-моему, так правильнее - /^(?:(?:25|2\d|?\d\d?)\.){3}(?:25|2\d|?\d\d?)$/ .

  • 1. Буквы и цифры - большие буквы латинского алфавита

  • A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

  • - малые буквы латинского алфавита

  • a b c d e f g h i j k l m n o p q r s t u v w x y z

  • - десятичные цифры 0 1 2 3 4 5 6 7 8 9

  • 2. Специальные символы

  • пробел! " # % & " () * + , - . / : ; ? [ \ ] ^ _ { | } ~

Идентификаторами

    Идентификаторами в языке Си являются последовательности букв и цифр, начинающиеся с буквы, причем символ подчеркивания рассматривается компилятором как буква. Большие и малые буквы латинского алфавита считаются различными. Длина идентификатора формально может быть произвольной, однако только лишь первые 31 символ являются значимыми для компилятора

  • В программах на языке Си идентификаторы служат именами переменных, символических констант, функций, типов данных и меток. Общепринято для именования констант использовать большие буквы латинского алфавита , сохраняя малые буквы для обозначения переменных и функций

  • Замечание. Не рекомендуется в прикладных программах использовать идентификаторы, начинающиеся с подчеркивания, ибо в конкретной среде это может привести к конфликту с именами создаваемых компилятором служебных переменных или констант

  • Name, name1, Total_5, paper



  • Ключевые слова - это предопределенные идентификаторы, имеющие специальные значения. Имена никаких объектов программы не должны совпадать со следующими зарезервированными ключевыми словами:

  • - типы данных

  • char float short typedef void double int signed union enum long struct unsigned

  • - классы памяти

  • auto extern register static

  • - операторы break default for return while case do goto sizeof continue else if switch

  • - специальные

  • const far huge pascal cdecl fortran near volatile



  • Под комментариями понимаются последовательности символов, игнорируемые компилятором. Комментарии имеют следующую форму:

  • /* Characters */ - однострочный комментарий

  • /* - многострочный комментарий Characters */

  • где Characters есть произвольная комбинация любых печатаемых символов ASCII



Константами в языке Си могут быть числа (целые и вещественные), символы и строки символов, которые допустимо использовать в программе в смысле их значений. Значение никакой константы не может быть изменено в процессе работы программы. Специальные директивы языка дают возможность присваивать константам любого типа символические имена

В тексте на любом естественном языке можно выделить четыре основных элемента: символы, слова, словосочетания и предложения. Подобные элементы содержит и алгоритмический язык, только слова называют лексемами (элементарными конструкциями), словосочетания - выражениями, а предложения - операторами. Лексемы образуются из символов, выражения - из лексем и символов, а операторы - из символов, выражений и лексем. В этой записи рассмотрен алфавит языка программирования C++ и его лексемы.

Алфавит C++

Алфавит C++ включает:

  • прописные и строчные латинские буквы и знак подчеркивания;
  • арабские цифры от 0 до 9;
  • специальные знаки: ? { } , ¦ () + — / % * . \ ‘ : ? < = > ! & # ~ — ; ^
  • пробельные символы: пробел, символы табуляции, символы перехода на новую строку.

Из символов алфавита формируются лексемы языка:

  • идентификаторы;
  • ключевые (зарезервированные) слова;
  • знаки операций;
  • константы;
  • разделители (скобки, точка, запятая, пробельные символы).

Границы лексем определяются другими лексемами, такими, как разделители или знаки операций.

Идентификаторы

Идентификатор - это имя программного объекта. В идентификаторе могут использоваться латинские буквы, цифры и знак подчеркивания. Прописные и строчные буквы различаются, например, sysop, SySoP и SYSOP - три различных имени. Первым символом идентификатора может быть буква или знак подчеркивания, но не цифра. Пробелы внутри имен не допускаются.

Для улучшения читаемости программы следует давать объектам осмысленные имена. Существует соглашение о правилах создания имен, называемое венгерской нотацией (поскольку предложил ее сотрудник компании Microsoft венгр по национальности), по которому каждое слово, составляющее идентификатор, начинается с прописной буквы, а вначале ставится префикс, соответствующий типу величины, например, iMaxLength, IpfnSetFirstDialog.
Другая традиция - разделять слова, составляющие имя, знаками подчеркивания: maxjength, number_of_galosh.

Длина идентификатора по стандарту не ограничена, но некоторые компиляторы и компоновщики налагают на нее ограничения. Идентификатор создается на этапе объявления переменной, функции, типа и т. п., после этого его можно использовать в последующих операторах программы. При выборе идентификатора необходимо иметь в виду следующее:

  • идентификатор не должен совпадать с ключевыми словами и именами используемых стандартных объектов языка;
  • не рекомендуется начинать идентификаторы с символа подчеркивания, поскольку они могут совпасть с именами системных функций или переменных, и, кроме того, это снижает мобильность программы;
  • на идентификаторы, используемые для определения внешних переменных, налагаются ограничения компоновщика (использование различных компоновщиков или версий компоновщика накладывает разные требования на имена внешних переменных).

Ключевые слова

Ключевые слова - это зарезервированные идентификаторы, которые имеют специальное значение для компилятора. Их можно использовать только в том смысле, в котором они определены. Список ключевых слов C++ приведен в таблице ниже.

Список ключевых слов C++
asm else new this
auto enum operator throw
bool explicit private true
break export protected try
case extern public typedef
catch false register typeid
char float reinterpret_cast typename
class for return union
const friend short unsigned
const_cast goto signed using
continue if sizeof virtual
default inline static void
delete int static__cast volatile
do long struct wchar_t
double mutable switch while
dynamic_cast namespace template

Знаки операций

Знак операции - это один или более символов, определяющих действие над операндами. Внутри знака операции пробелы не допускаются. делятся на унарные, бинарные и тернарную по количеству участвующих в них операндов. Знаки операций приведены в отдельной заметке –

Один и тот же знак может интерпретироваться по-разному в зависимости от контекста. Все знаки операций за исключением , () и? : представляют собой отдельные лексемы.

Большинство стандартных операций может быть переопределено (перегружено).

Константы

Константами называют неизменяемые величины. Различаются целые, вещественные, символьные и строковые константы. Компилятор, выделив константу в качестве лексемы, относит ее к одному из типов по ее внешнему виду (формат константы можно указать самостоятельно).

Форматы констант, соответствующие каждому типу, приведены в таблице ниже.

Константа Формат Константа
Целая Десятичный: последовательностьдесятичных цифр, начинающаясяне с нуля, если это не число нуль

Восьмеричный: нуль, за которым

следуют восьмеричные цифры

(0,1,2,3,4,5,6,7)

Шестнадцатеричный: 0х или 0Х,

за которым следуют шестнадцатеричные

цифры (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)

8, 0, 199226

0хА, 0x1B8, 0X00FF

Вещественная Десятичный:[цифры].[цифры]Экспоненциальный:

[цифры][.][цифры]{Е¦е}[+¦ -][цифры]

5.7, .001, 35.0.2Е6, .11е-З, 5Е10
Символьная Один или два символа, заключенных в апострофы ‘А’, ‘ю’, ‘*’, ‘db’, ‘\0’, ‘\n’ , ‘\012’, ‘\x07\x07’
Строковая Последовательность символов, заключенная в кавычки «Здесь был Vasia»,»\t3начение r=\0xF5\n»

Не следует забывать, что у каждого типа данных есть диапазон допустимых значений.

Если требуется сформировать отрицательную целую или вещественную константу, то перед константой ставится знак унарной операции изменения знака (-), например: -218, -022, -0х3C, -4.8, -0.1e4.

Вещественная константа в экспоненциальном формате представляется в виде мантиссы и порядка . Мантисса записывается слева от знака экспоненты (Е или е), порядок - справа от знака. Значение константы определяется как произведение мантиссы и возведенного в указанную в порядке степень числа 10. Обратите внимание, что пробелы внутри числа не допускаются, а для отделения целой части от дробной используется не запятая, а точка.

Символьные константы, состоящие из одного символа, занимают в памяти один байт и имеют стандартный тип char. Двухсимвольные константы занимают два байта и имеют тип int, при этом первый символ размещается в байте с меньшим адресом.

Все строковые литералы рассматриваются компилятором как различные объекты.

Строковые константы, отделенные в программе только пробельными символами, при компиляции объединяются в одну. Длинную строковую константу можно разместить на нескольких строках, используя в качестве знака переноса обратную косую черту, за которой следует перевод строки. Эти символы игнорируются компилятором, при этом следующая строка воспринимается как продолжение предыдущей. Например, строка

“Никто не доволен своей \
внешностью, но все довольны \
своим умом”

полностью эквивалентна строке

“Никто не доволен своей внешностью, но все довольны своим умом”

В конец каждого строкового литерала компилятором добавляется нулевой символ, представляемый \0.
Поэтому длина строки всегда на единицу больше количества символов в ее записи. Таким образом, пустая строка?? имеет длину 1 байт.

Обратите внимание на разницу между строкой из одного символа, например, «А», и символьной константой?А?.

Пустая символьная константа недопустима.