|
|
|
| Есть текст, напрмер: "первая фраза" другие слова "вторая фраза"
как мне выделить то что находится в кавычках, т. е. первую фразу и вторую фразу
у меня сейчас регулярное выражение выделяет весь текст целиком (понятно почему).
помогите пожалуйста | |
|
|
|
|
|
|
|
для: neokortex
(05.12.2008 в 01:16)
| | /"(.*?)"/ или /"(.*)"/U | |
|
|
|
|
|
|
|
для: BinLaden
(05.12.2008 в 02:54)
| | Думаю лучше будет так /"(.+?)"/
Зачем нужен элемент, если он будет пустой между кавычками. | |
|
|
|
|
|
|
|
для: AcidTrash
(05.12.2008 в 08:52)
| | Спасибо. Разовью тему:
как найти совпадение например 123 в этих кавычках? (вместо .)
При этом учитывая что 123 может попадаться от одного раз и более | |
|
|
|
|
|
|
|
для: neokortex
(05.12.2008 в 17:00)
| | Ну помимо третьего поста можно еще
) | |
|
|
|
|
|
|
|
для: neokortex
(05.12.2008 в 17:00)
| | /"(123)+"/ | |
|
|
|
|
|
|
|
для: BinLaden
(05.12.2008 в 18:46)
| | плюс не нужен, так как шаблон очевиден. | |
|
|
|
|
|
|
|
для: AcidTrash
(05.12.2008 в 21:58)
| | > от одного раз и более | |
|
|
|
|
|
|
|
для: BinLaden
(05.12.2008 в 22:29)
| |
<pre>
<?php
$t='"123" другие слова "123"
другие слова "123"
другие слова "123"';
preg_match_all('/"(123)"/',$t,$o);
print_r($o);
?>
|
Разница есть?
Да не нужен он, здесь конкретное условие. | |
|
|
|
|
|
|
|
для: AcidTrash
(05.12.2008 в 22:38)
| | Я имел ввиду "123", "123123", ... Вы, как мастер, должны были понимать, что я имею ввиду, когда ставлю плюс в паттерне. | |
|
|
|
|
|
|
|
для: BinLaden
(05.12.2008 в 22:56)
| | Да, не учёл. :)
Бывает. | |
|
|
|
|
|
|
|
для: AcidTrash
(05.12.2008 в 23:04)
| | не работает =(
я вот так делаю
$text="первая фраза \"123 какие-то слова\" опять слова \"123\" опять разные \"что-либо 123\" слова";
$preg=preg_replace("/\"(123)+\"/", "[\\0]", $text);
echo $preg;
|
выводит первая фраза "123 какие-то слова" опять слова ["123"] опять разные "что-либо 123"
а нужно вообще:
первая фраза "[123] какие-то слова" опять слова "[123]" опять разные "что-либо [123]"
т. е. надо найти определенный текст в кавычках.
помогите :( | |
|
|
|
|
|
|
|
для: 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:57)
| | , | |
|
|
|
|
|
|
|
для: xx77
(10.12.2008 в 00:59)
| | спасибо огромное | |
|
|
|