Showing posts with label PCRE. Show all posts
Showing posts with label PCRE. Show all posts

Tuesday, January 24, 2012

Method preg_match() for Cyrillic characters in PHP

Sometimes I encounter the problem with preg_match() method, because it doesn't treat Cyrillic characters the proper way. The problem also corresponds to other non-latin characters.
There is a solution for the search in the string that contains non-latin characters.
<?php 
  preg_match("/^[a-zA-Z\p{Cyrillic}]+$/u", "AбВгд");
?>
Do not forget about the Pattern Modifier - u
u (PCRE_UTF8)

This modifier turns on additional functionality of PCRE that is incompatible with Perl. Pattern strings are treated as UTF-8.

This modifier is available from PHP 4.1.0 or greater on Unix and from PHP 4.2.3 on win32. UTF-8 validity of the pattern is checked since PHP 4.3.5.

Sunday, November 15, 2009

Регулярные выражения в JavaScript

Регулярные выражения служат для того, чтобы иметь возможность задавать образец, с которым можно сравнивать строки. Регулярное выражение может показать, например, соответствует ли даное слово образцу. Причем, регулярные выражения (иначе, PCRE) могут сравнивать не только фиксированные символы образца и проверяемых строк. Они могут искать соответствия некоторых заранее заданных конструкций. Например, с помощью регулярных выражений можно найти все слова, ограниченные пробелами с двух сторон.

Существуют два способа задания регулярных выражений - сокращенный и формальный.


var reg = /pattern/;  //сокращенный
var reg = new RegExp("pattern"); //формальный

Tuesday, August 12, 2008

Регулярные выражения в РНР

Достаточно часто приходится работать с регулярными выражениями. В этом посте - основы, которые лучше держать в голове, но если вдруг они забудутся - то можно освежить память.
Итак.
Регулярные выражения - это усовершенствованная система шаблонов. Сначала пишется шаблон, затем с помощью одной из встроенных функций РНР он применяется к текстовой строке (регулярные выражения используются исключительно для работы со строками).
Шаблон определяется комбинацией символов, групп и классов.

Литералы
Первый тип символов, используемый для создания шаблона. Он обозначает только то, что обозначает, и не более того.
Например,шаблону «а» будет соответствовать только буква «а»,
шаблону «ab» - только «ab» и т.д.
Литералы позволяют находить точные соответствия.

Метасимволы
Более сложной структурой, чем литералы, являются метасимволы. Это специальные символы, имеющие более широкое значение. Они приведены в таблице.
(И то, чего нет в таблице, здесь "\s" - пробел)

Так, если «а» означает просто «а», то первый метасимвол, точка (.), отождествляется с любым отдельным символом (а, 1, % и т.д.).
Есть три метасимвола, позволяющие находить многочисленные соответствия:
«а*» отождествляется с нулем или любым количеством букв «а» (а, аа,ааа и т.д.);
«а+» отождествляется с одной или более «а» (а, аа, ааа и т.д., но хотя бы одна должна быть);
«а?» отождествляется с нулем или одной буквой «а».

Для поиска определенного количества одной буквы необходимо поместить в фигурные скобки диапазон ({}), указав либо конкретное число, либо минимум, либо и минимум и максимум.
Например,
«а {3}» будет соответствовать только «ааа»;
«а {3 ,}» - ааа, аааа и т.д. (три или больше букв «а»);
«а {3 , 5}» - ааа,аааа и ааааа (между тремя и пятью буквами включительно).

Знак «крышечка» ^, тот, что обычно представлен на клавиатуре над цифрой 6) будет соответствовать строке, начинающейся со следующей за знаком буквы. Этот знак можно условно представить как псевдосимвол, с которого начинается каждая строка.

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

В регулярных выражениях также используется знак вертикальной черты | как эквивалент слова «или».
Например, запись а | b будет соответствовать строкам а или b,
а запись gre | ay будет отождествляться с обоими вариантами написания названия цвета (по-английски и grey, и gray означают «серый»).

Специальные символы ". [ ] $ ( ) | * ? {} \ в шаблоне должны быть экранированы посредством поставленного перед ними обратного слеша.

Сопоставление с шаблонами
В РНР есть две встроенные функции, предназначенные специально для сопоставления с шаблоном в строке: еrеg ( ) и eregi ( ) .
Разница между ними состоит в том, что функция еrеg ( ) реагирует на регистр, a eregi () - нет, то есть не различает строчные и прописные буквы.
Значение обеих функций будет истинным, если произошло совпадение с шаблоном, и ложным в противном случае.
Ниже представлены два способа использования этих функций:

ereg("pattern", "string");
или

$Pattern = "pattern";
$String = "string";
eregi($Pattern, $String);