PHP preg_match: шаблон, который удовлетворяет всем именам полей MySQL (включая формирования 'table.field') - PullRequest
0 голосов
/ 11 июня 2010

мне нужен шаблон, который удовлетворяет именам полей mysql, но также с возможностью иметь имя таблицы перед ним

примеры:

mytable.myfield
myfield
my4732894__7289FiEld

вот что я попробовал:

$pattern = "/^[a-zA-Z0-9_]*?[\.[a-zA-Z0-9_]]?$/";

это работало для того, что мне было нужно раньше, это было просто имя поля:

$pattern = "/^[a-zA-Z0-9_]*$/";

есть идеи, почему мое дополнение не работает?

возможно, я придумываюрегулярное выражение, поэтому я объясню, что я добавил ... первый '?'это сказать, что это не жадный, т.е.это остановится, если следующая часть, а именно "[. [a-zA-Z0-9_]]?"доволен.теперь эта вторая часть точно такая же, как и первая, за исключением того, что она необязательна (отсюда и «?» в конце) и начинается с точки (отсюда и «[.» и «]», обертывающей мое старое предложение., «^» и «$» соответствуют началу и концу строки

, так что ... есть идеи?

(кроме того, я немного запутался, зачем мне это нужно?в любом случае вставить эти "/" в начало / конец, так что если бы вы могли сказать мне, почему это необходимо, это было бы здорово)

большое спасибо! (и спасибо, что прочитали все это, если вына самом деле сделал ... это довольно бессмысленно)

Ответы [ 2 ]

2 голосов
/ 11 июня 2010

[...] используется для создания класса символов.Для группировки используйте (?:...).

Кстати, \w соответствует [a-zA-Z0-9_], поэтому

$pattern = "/^\\w+(?:\\.\\w+)?$/"

Обратите внимание, что я также заменил *? на +.Так как \w никогда не совпадет с ., поэтому не нужно жадное совпадение (*?*).Но я не думаю, что .field должен быть действительным, поэтому вместо * следует использовать +.

1 голос
/ 11 июня 2010

Имена полей (и имена таблиц) могут содержать практически любой символ. Не поддерживаются только имена полей символов: NULL (0x00) и завершающие пробелы. Имена таблиц (и имена БД) немного более ограничены в том смысле, что они также не могут иметь /, \ или . ... Единственное требование - заключать идентификаторы в кавычки обратного кавычка `` '. Если идентификатор содержит обратную косую черту, экранируйте ее другой обратной косой чертой ...

http://dev.mysql.com/doc/refman/5.0/en/identifiers.html

...