Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Символ & в регулярном выражении (https://javascript.ru/forum/server/71214-simvol-v-regulyarnom-vyrazhenii.html)

Sonya 02.11.2017 15:10

Символ & в регулярном выражении
 
Здравствуйте! Помогите, пожалуйста.
С помощью регулярки, сравниваю строки из файла и вывожу номер строки так:
$str = (key(preg_grep('|'.preg_quote($url).'|i',$ar))+1);

Но если строка содержит символ "&", то при наличии одинаковых строк, но с данным символом, скрипт сообщает, что такой строки нет. Как мне быть?

laimas 02.11.2017 15:52

А зачем рег. выражения для сравнения строк? Если & и $url, сравниваются URL? А если так, то что есть "одинаковые URL"? Может быть parse_url и parse_str?

Sonya 02.11.2017 16:04

Да, URL передается через get запрос, вот этот URL, надо сравнить со списком URL в файле. Как это сделать лучше?

laimas 02.11.2017 16:07

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

parse_url и parse_str, это для анализа URL.

Sonya 02.11.2017 16:16

Цитата:

Сообщение от laimas (Сообщение 468936)
Вы не сможете сравнивать URL посредством руг. выражений уже потому, что к примеру порядок одних и тех же параметров запроса может быть иной, а если при этом не важны значения параметров, то тем более.

parse_url и parse_str, это для анализа URL.

Что интересно, все работало, пока не столкнулась с этой проблемой. В принципе, их сравнение вписывается в сравнение двух строк, тем более нужен, по сути, номер найденной строки в файле. Необходимо, в принципе, простое сравнение, что подскажите? parse_url - разбирает URL и возвращает его компоненты, как мне это поможет?

laimas 02.11.2017 16:21

Цитата:

Сообщение от Sonya
Необходимо, в принципе, простое сравнение

Для сравнения строк не нужны рег. выражения.

Цитата:

Сообщение от Sonya
что подскажите?


Я не знаю, что в вашем случае есть условие "равно", если отсутствие и наличие символа & в строке не должно учитываться. Коли он вам мешает, удаляйте его перед сравнением.

Sonya 02.11.2017 16:36

Нет символ & - стал "камнем преткновения", если он в URL есть, значит пусть будет. С помощью рег. ищу числовые строки, очень даже успешно. Здесь же задача, как мне видится простая, поиск URL переданного через GET - в файле, здесь рег. выражения, как поняла, не вариант, вопрос тогда, как лучше?

laimas 02.11.2017 16:42

Если & камень преткновения, то path?a=1&b=2 и path?a=1 равны или нет? А path?a=1&b=2 и path?b=2&a=1 равны?

Я не задаю условий что равно, а что нет, поэтому что-то сказать не могу. Функции производящие анализ URL я привел.

Sonya 02.11.2017 16:55

Цитата:

Сообщение от laimas (Сообщение 468945)
path?a=1&b=2 и path?a=1 равны или нет? А path?a=1&b=2 и path?b=2&a=1 равны?

Нет! В анализе URL нет смысла, URL - в файле, та же самая строка, если она идентична, той которая передается в запросе, то истина, если отличается - её проблемы, даже, если она несет на исполнение ту же информацию.

Sonya 02.11.2017 16:57

Поэтому и стоит вопрос о сравнении строк, как таковых, а не URL. Поэтому в моем вопросе изначально, я не делала акцент на URL, хотя из имени переменной это было понятно.

laimas 02.11.2017 16:58

Цитата:

Сообщение от Sonya
если она идентична

Что значит идентична если судя по вашим словам наличие параметров запроса (есть &) для вас помеха, и можно предположить что параметры не учитываются?

Sonya 02.11.2017 19:05

Решила через адресную строку.

laimas 02.11.2017 19:13

Sonya,
так и не понял, что за проблема. :)

Sonya 02.11.2017 21:55

Амперсанд & обрезает сроку, пробовала через GET, с которым пользователь заходит на страницу, GET сравнила с URL в файле, если есть, то одна инфа, нет другая. Но & обрезает строку и, соответственно, в файле не находит. Использовала через вывод адресной строки в переменную, с обрезанием адреса самой страницы, строка выводится правильно, но поиск такой же строки в файле все равно не дает положительного результата. Строка есть, но поиск в файле её не находит, что делать не пойму.

Rasy 03.11.2017 01:56

Sonya,
такое?
$s = 'watch?v=aryXFA4MzSs&v1=asdaabdba';
$ar = ['watch?v=aasdbasd&v1=asdazzz', 'watch?v=aryXFA4MzSs&v1=asdaabdba'];    
$indx = key(preg_grep('|'.preg_quote($s).'|i',$ar));
echo $indx; // 1

laimas 03.11.2017 05:48

Цитата:

Сообщение от Sonya
что делать не пойму

Использовать бинарно-безопасное сравнение строк. К чему тут регулярные выражения.


Часовой пояс GMT +3, время: 07:21.