Вам необходимо экранировать символ |
в регулярных выражениях, иначе это означает чередование. Также полезно использовать якоря, если вы сомневаетесь, нужны ли они для вашей библиотеки регулярных выражений. Это выражение соответствует всему, что содержит 1 в id:
^.*1.*\|.*\|.*\|.*$
Чтобы точно соответствовать id = 1, измените его на:
^1\|.*\|.*\|.*$
Для точного соответствия имени = 'Foo':
^.*\|Foo\|.*\|.*$
В комментариях следует отметить, что было бы неплохо использовать [^|]*
вместо .*
, чтобы гарантировать, что данные имеют правильное количество символов канала.
Обратите внимание, что регулярные выражения будут медленным способом поиска ваших данных, если вам потребуется много поисков. Было бы быстрее сначала проанализировать данные, а затем сохранить их в структурах данных, которые позволяют быстро выполнять поиск, например, в хэш-таблице.