Привет, у меня небольшая проблема с моим регулярным выражением.
Для простоты:
$pattern='/^(a([0-9]|[a-z])?|b(\=|\?)?)$/';
$subject='b=';
возвращает массив:
Array
(
[0] => b=
[1] => b=
[2] =>
[3] => =
)
Номер индекса 2 в этом массиве - от (...)? - мой вопрос: могу ли я избежать этого поля в моем результате? У меня очень длинный шаблон, и мой массив на 90% пуст. Могу ли я удалить эти пустые поля некоторыми волшебными символами?
Изменение: В моем шаблоне у меня есть что-то вроде этого:
n(o|h)?(\+|\-|\(([+]?[0-9]+);([+]?[0-9]+)\))?
Он будет искать строки, такие как no+ или n (12; 15). Могу ли я сделать это проще? И у меня больше текста, как это, это значит, что у меня есть что-то вроде этого:
/^(n(o|h)?(\+|\-|\(([+]?[0-9]+);([+]?[0-9]+)\))?|i(o|h)?(\+|\-|\(([+]?[0-9]+);([+]?[0-9]+)\))?)$/
С уважением
После прочтения вашего шаблона я предполагаю, что вы можете упростить эту версию:
\A([in][oh]?)([+-]|\(\+?[0-9]+;\+?[0-9]+\))\z
Обратите внимание: я не знаю точно, какие именно вам нужны, но вы можете добавить их, как хотите.
Детали:
\A # anchor for the start of the string
( # capture group 1:
[in] # a 'i' or a 'n'
[oh]? # a 'o' or a 'h' (optional)
)
( # capture group 2:
[+-] # a '+' or a '-'
| # OR
\(\+?[0-9]+;\+?[0-9]+\)
)
\z # anchor for the end of the string
^(?:a[0-9a-z]?|b[=?]?)$
Как указано @CasimiretHippolyte