Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Кавычки
 
 автор: neokortex   (05.12.2008 в 01:16)   письмо автору
 
 

Есть текст, напрмер: "первая фраза" другие слова "вторая фраза"
как мне выделить то что находится в кавычках, т. е. первую фразу и вторую фразу
у меня сейчас регулярное выражение выделяет весь текст целиком (понятно почему).
помогите пожалуйста

  Ответить  
 
 автор: BinLaden   (05.12.2008 в 02:54)   письмо автору
 
   для: neokortex   (05.12.2008 в 01:16)
 

/"(.*?)"/ или /"(.*)"/U

  Ответить  
 
 автор: AcidTrash   (05.12.2008 в 08:52)   письмо автору
 
   для: BinLaden   (05.12.2008 в 02:54)
 

Думаю лучше будет так /"(.+?)"/
Зачем нужен элемент, если он будет пустой между кавычками.

  Ответить  
 
 автор: neokortex   (05.12.2008 в 17:00)   письмо автору
 
   для: AcidTrash   (05.12.2008 в 08:52)
 

Спасибо. Разовью тему:
как найти совпадение например 123 в этих кавычках? (вместо .)
При этом учитывая что 123 может попадаться от одного раз и более

  Ответить  
 
 автор: ddhvvn   (05.12.2008 в 18:35)   письмо автору
 
   для: neokortex   (05.12.2008 в 17:00)
 

Ну помимо третьего поста можно еще
/"[^"]+"/
)

  Ответить  
 
 автор: BinLaden   (05.12.2008 в 18:46)   письмо автору
 
   для: neokortex   (05.12.2008 в 17:00)
 

/"(123)+"/

  Ответить  
 
 автор: AcidTrash   (05.12.2008 в 21:58)   письмо автору
 
   для: BinLaden   (05.12.2008 в 18:46)
 

плюс не нужен, так как шаблон очевиден.

  Ответить  
 
 автор: BinLaden   (05.12.2008 в 22:29)   письмо автору
 
   для: AcidTrash   (05.12.2008 в 21:58)
 

> от одного раз и более

  Ответить  
 
 автор: AcidTrash   (05.12.2008 в 22:38)   письмо автору
 
   для: BinLaden   (05.12.2008 в 22:29)
 

<pre>
<?php
$t
='"123" другие слова "123"
другие слова "123"
другие слова "123"'
;
preg_match_all('/"(123)"/',$t,$o);
print_r($o);
?>

Разница есть?
Да не нужен он, здесь конкретное условие.

  Ответить  
 
 автор: BinLaden   (05.12.2008 в 22:56)   письмо автору
 
   для: AcidTrash   (05.12.2008 в 22:38)
 

Я имел ввиду "123", "123123", ... Вы, как мастер, должны были понимать, что я имею ввиду, когда ставлю плюс в паттерне.

  Ответить  
 
 автор: AcidTrash   (05.12.2008 в 23:04)   письмо автору
 
   для: BinLaden   (05.12.2008 в 22:56)
 

Да, не учёл. :)
Бывает.

  Ответить  
 
 автор: neokortex   (09.12.2008 в 23:18)   письмо автору
 
   для: AcidTrash   (05.12.2008 в 23:04)
 

не работает =(
я вот так делаю
$text="первая фраза \"123 какие-то слова\" опять слова \"123\" опять разные \"что-либо 123\" слова";
$preg=preg_replace("/\"(123)+\"/", "[\\0]", $text);
echo $preg;

выводит первая фраза "123 какие-то слова" опять слова ["123"] опять разные "что-либо 123"
а нужно вообще:
первая фраза "[123] какие-то слова" опять слова "[123]" опять разные "что-либо [123]"
т. е. надо найти определенный текст в кавычках.
помогите :(

  Ответить  
 
 автор: xx77   (10.12.2008 в 00:57)   письмо автору
 
   для: neokortex   (09.12.2008 в 23:18)
 

Сразу привели-бы пример или объяснили-бы, не было-бы несовпадающих ответов :)

Здесь нужно в выражении чётко обозначить то что перед '123' и после '123' может быть ещё что-нибудь , кроме кавычек.

например "[^"]*?123.*?"
нашло-бы текст с кавычками в которых есть хотя-бы одно '123',
здесь в начале лучше [^"]* чем .*? потомучто возможна ситуация когда совпадёт первая кавычка, и .*?123 после этого совпадёт с любым текстом до любого '123' возможно вне кавычек, а [^"]* не позволит перейти за кавычку.

и получается нужно выделить не всё совпадение, а только 123
, значит было-бы
$preg=preg_replace('/("[^"]*?)(123)(.*?")/', '\1[\2]\3', $text);

, но тут ещё получается что '123' нужно выделять все попавшиеся,
и например из того что совпадало-бы с (123)+ несколько раз подряд в \1 или в $1 попало-бы только последнее из всех 123, из чего следует что так нельзя выделить более одного 123 в одной паре кавычек,

И значит можно только теперь придумать как-бы выдернуть текст в кавычках для функции замены в preg_replace_callback(), внутри которой и выделится всё нужное,
или второй более медленный иногда , и не очень удобный и безопасный метод :)
например просто с str_replace()
$preg=preg_replace('/"([^"]*?123.[^"]*)"/e', '\'"\' . str_replace(\'123\', \'[123]\', \'$1\') . \'"\'', $text);
(незнаю насколько правильно написал)

я-бы советовал preg_replace_callback()
и насчёт выражений , такими они не так как нужно могут понять например строку
......"1234 раза по 1123 \"у.е.(1у.е. равен 5123е)\"" ....
но лучше было-бы если такое и не требовалось-бы разбирать ;)

  Ответить  
 
 автор: xx77   (10.12.2008 в 00:59)   письмо автору
 
   для: xx77   (10.12.2008 в 00:57)
 

,

  Ответить  
 
 автор: neokortex   (10.12.2008 в 02:27)   письмо автору
 
   для: xx77   (10.12.2008 в 00:59)
 

спасибо огромное

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования