Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как свести условия в одно РВ?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Perun
Отправлено: 22 Февраля, 2021 - 15:46:23
Post Id


Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Дек. 2016  


Помог: 0 раз(а)




Можно ли отловить одним рв без захвата?

^wordone|wordtwo|wordthree(
\^wordone|wordtwo|wordthree(
+wordone|wordtwo|wordthree(
(wordone|wordtwo|wordthree(


Первый вариант- ^ - это с начала строки
Нужно отлавливать только слово. Либо wordone, либо wordtwo либо wordthree. Без скобок и операторов. Это слово может быть только в начале или в середине строки.

(Отредактировано автором: 22 Февраля, 2021 - 17:32:07)

 
 Top
Perun
Отправлено: 22 Февраля, 2021 - 17:58:33
Post Id


Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Дек. 2016  


Помог: 0 раз(а)




Похоже, без захвата это не делается, оставил пока так:
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. "[+^(](wordone|wordtwo|wordthree)\("
  3.  


Из той же оперы, регулярка ищет вхождение. которого в строке быть не должно:
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. ".*[a-zA-Z|0-9]+\(.*"
  3.  


как тут исключить (wordone|wordtwo|wordthree)?
Т.е. эти слова могут быть перед открывающей скобкой
Как это исключение добавить в набор?

(Отредактировано автором: 22 Февраля, 2021 - 21:08:47)

 
 Top
dcc0
Отправлено: 24 Февраля, 2021 - 01:14:59
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




Cut

(Отредактировано автором: 28 Февраля, 2021 - 17:58:56)



-----
Март 2021. Бросил программирование
 
 Top
Perun
Отправлено: 27 Февраля, 2021 - 22:42:14
Post Id


Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Дек. 2016  


Помог: 0 раз(а)




dcc0 пишет:
Попробую перевести в human readable: отрицание трёх слова, затем ваше правило

не совсем праильно.

РВ должно обнаруживать любую последовательность только из букв [a-zA-Z]
кроме целых слов: wordone, wordtwo и wordthree

например: входная строка -> есть совпадение или нет

wordonet -> true
networdone -> true
12test -> false
wordtwo -> false
testwordonetest -> true
wordonewordtwo -> true
word/three -> false
wordone12 -> false
qwertY -> true
a -> true
000 -> false
/ -> false
AAZZ -> true

(Отредактировано автором: 27 Февраля, 2021 - 22:47:05)

 
 Top
dcc0
Отправлено: 28 Февраля, 2021 - 18:09:26
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




Я там выше неправильно написал. Может быть, и не получится в один проход.
(Сильно торможу). отрицание слова делается так:

Соответственно трудно уместить в одно выражение любые буквенные символы и исключить три слова.
Поэтому могу предложить только сделать предварительный фильтр.

(Отредактировано автором: 28 Февраля, 2021 - 18:17:51)



-----
Март 2021. Бросил программирование
 
 Top
dcc0
Отправлено: 01 Марта, 2021 - 13:30:00
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


Помог: 10 раз(а)




Можно попытаться использовать положительный или/и отрицательный просмотр назад и вперёд:
PHP:
скопировать код в буфер обмена
  1.  
  2.                 $string = "wordone hello world";
  3.                 preg_match_all("/(?<=wordone)[\sa-zA-Z0-9\s]+(?=world)/u", $string, $match);
  4.                 print_r($match);
  5.  

Но надо до конца понимать, как выглядят строки.
(Добавление)
Или фильтр наподобие такого:
Спойлер (Отобразить)

(Отредактировано автором: 01 Марта, 2021 - 22:21:22)



-----
Март 2021. Бросил программирование
 
 Top
Vladimir Kheifets
Отправлено: 02 Марта, 2021 - 11:56:19
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 37 раз(а)




Perun пишет:
dcc0 пишет:
Попробую перевести в human readable: отрицание трёх слова, затем ваше правило

не совсем праильно.

РВ должно обнаруживать любую последовательность только из букв [a-zA-Z]
кроме целых слов: wordone, wordtwo и wordthree

например: входная строка -> есть совпадение или нет

wordonet -> true
networdone -> true
12test -> false
wordtwo -> false
testwordonetest -> true
wordonewordtwo -> true
word/three -> false
wordone12 -> false
qwertY -> true
a -> true
000 -> false
/ -> false
AAZZ -> true


Добрый день!
Код:
Спойлер (Отобразить)

Результ:
Цитата:
pattern:
/(?=^[[:alpha:]]+$)(?!^(wordone|wordtwo|wordthree)$)/

wordonet -> true
networdone -> true
12test -> false
wordone -> false
wordtwo -> false
wordthree -> false
testwordonetest -> true
wordonewordtwo -> true
word/three -> false
wordone12 -> false
qwertY -> true
a -> true
000 -> false
/ -> false
AAZZ -> true
Удачи!

(Отредактировано автором: 02 Марта, 2021 - 12:03:18)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB