|
|
|
| Здравствуйте.
Вопрос навернре надоевший, но поиск по сайту ничего не дал.
Как всетаки обозначить любой символ, включая пробел и перевод строки?
Спасибо. | |
|
|
|
|
|
|
|
для: Николай2357
(09.07.2008 в 20:37)
| | ну например [\s\S] | |
|
|
|
|
|
|
|
для: Trianon
(09.07.2008 в 21:07)
| | Я так пробовал, чет не получается. до перевода строки работает. Пробелы видит, а перевод строки нет. Хотя должен. Может я не так что делаю. Задача такая: выбрать все, что есть между кавычками. Включая пробелы, перевод строки перевод страницы и все что угодно. Ах, да, может я не в ту тему, но мне это на JS нужно. Вот так не работает:
var reg1 = new RegExp("\"[\s\S]*\","g");
var reg1 = new RegExp("\"(.*)\","g");
|
Спасибо. | |
|
|
|
|
|
|
|
для: Николай2357
(10.07.2008 в 06:41)
| | а использовать \n\r не пробовал?
во вторых, если текст прочитан построчно из файла, перевода строк там может и не быть (не уверен, не проверил,но вроде так) | |
|
|
|
|
|
|
|
для: GeorgeIV
(10.07.2008 в 10:16)
| | Блин, где ты раньше был? Oгромное спасибо! Второй день мучаюсь.
Я \n проверял конечно, а на \n\r ума не хватило.
Все работает, спасибо еще раз.
А вообще не понятно, \s вроде бы все должен подразумевать, все пробельные символы. | |
|
|
|
|
|
|
|
для: Николай2357
(10.07.2008 в 10:41)
| | перевод строки по моему не входит ни в один набор | |
|
|
|
|
|
|
|
для: GeorgeIV
(10.07.2008 в 10:46)
| | У меня следующая загвоздка, как теперь ковычку из текста между ковычками исключить. Пробовал [^\"] - не получается. А так он у меня все от первой до последней ковычки тащит. | |
|
|
|
|
|
|
|
для: Николай2357
(10.07.2008 в 11:23)
| | а уверен, что именно двойная кавычка между одинарными, а не наоборот? | |
|
|
|
|
|
|
|
для: GeorgeIV
(10.07.2008 в 11:39)
| | Да разницы нет, какая. Вот если текст такой: Вова, "Вася", Петя, "Дима", Маша
он выдает "Вася", Петя, "Дима". То есть все, что между первой и последней. | |
|
|
|
|
|
|
|
для: GeorgeIV
(10.07.2008 в 10:46)
| | В умной книжке написано: \s - любой пробельный символ, включая пробел, табуляцию, перевод страницы, новая строка и перевод каретки.
Может книжка не сильно умная... | |
|
|
|
|
|
|
|
для: Николай2357
(10.07.2008 в 11:34)
| | Скорей всего книжка права... :-( | |
|
|
|
|
|
|
|
для: GeorgeIV
(10.07.2008 в 11:59)
| | Интересно, а почему же не работает с \s, а работает с \n\r? Я с перепугу все прописал и \f и \t и \v...
Как же всетаки исключить зту ковычку дурацкую? Опять ни один вариант из умной книжки не проходит. | |
|
|
|
|
|
|
|
для: Николай2357
(10.07.2008 в 12:04)
| | Методом научного тыка вычислил, что нужно сделать так:
\'(.*?)\'
Остался вопрос, что такое вопрос?(знак вопросительный) В моей умной книжке такого нет... | |
|
|
|
|
|
|
|
для: Николай2357
(10.07.2008 в 12:33)
| | Квалификаторы
Регулярное выражение можно уточнить при помощи квалификаторов - так называются символы +, ?, *. Квалификаторы говорят о том, сколько раз последовательность символов может встретиться в строке и указываются непосредственно после той части выражения, к которой они применяются:
• "a+" - хотя бы один а (строки "абв" и "абва" соответствуют этому выражению, а строка "укр" - нет);
• "a?" - ноль или один а (строки "абв" и "укр" соответствуют этому выражению, а строка "абва" - нет);
• "a*" - ноль или более а (строки "абв" и "абва" и "укр" соответствуют этому выражению).
И еще
Для решения этой проблемы нужно написать знак вопроса после квантификатора. Тогда он перестанет быть «жадным» и попытается захватить как можно меньшее число повторений элемента, к которому он применен (квантификатор применяется к элементу, что стоит перед ним). | |
|
|
|
|
|
|
|
для: GeorgeIV
(10.07.2008 в 12:42)
| | Огромное спасибо. Очень мне помогли. Пойду в магазин за другой книжкой, эта не полная. Про квантификаторы там есть, а про вопрос както упустили... | |
|
|
|
|
|
|
|
для: Николай2357
(10.07.2008 в 12:33)
| | вопрос после квантификатора меняет режим жадности. | |
|
|
|
|
|
|
|
для: Trianon
(10.07.2008 в 12:46)
| | А как логически это понять?
* обозначает ноль или больше, а ?- 0 или 1. А когда *? все равно должно быть 0 или 1,
или + это один или больше, а +? должно тоже быть не больше одного вхождения. Однако конструкция (.*?) или (.+?) вылавливает все символы, даже если они повторяются (я проверял), а конструкция \"(.*?)\" или \"(.+?)\" вылавливает все, кроме ковычки.
Странно. | |
|
|
|
|
|
|
|
для: Николай2357
(10.07.2008 в 14:36)
| | так потому что точка - это любой символ, поэтому тут жадность не появляется.
а ? после квантификатора означает, что поиск остановится при первом же совпадении, а не будет искаться максимальное | |
|
|
|
|
|
|
|
для: GeorgeIV
(10.07.2008 в 14:53)
| | Все равно непонятно. Вот такой текст "ававава". По логике поиск должен остановиться на второй а.
Или если такой "авввввввва". Может так и есть, сейчас проверю.
Трудно это понять. Но уже чтото. Я первый раз с регулярными столкнулся, спасибо за ликбез. | |
|
|
|
|
|
|
|
для: Николай2357
(10.07.2008 в 15:08)
| | если точка - не остановится, если "/ав/", должен | |
|
|
|
|
|
|
|
для: GeorgeIV
(10.07.2008 в 15:17)
| | Да все так. А ковычка то причем тут, непойму. Вот по полочкам, как я понимаю. (Мне это очень важно понять, потому что на этом будет строится мое представление о регулярных)
\" означает, что выражение начинается с ковычки. Потом (.+?). Не совсем понятно, но примерно так: любой, в том числе и ковычка, могут встретится в тексте + один или более раз, ? может встретится только один раз или невстретиться совсем. Тоесть вместе должно быть только один раз. Потом опять \" то есть заканчивается ковычкой.
Вот тут начинается.
1.Почему не работает квантификатор {1} вместо +? \?(cлэш защитный, чтобы с тем вопросом не перепутать. Шутка)
2. Почему любые дручие символы, кроме ковычек могут встречаться в тексте больше одного раза.
3. Причеь здесь эта ковычка. Ему глубоко плевать на остальные символы. Я проверял.
Выходит, что такая конструкция (.+?) или (.*?) обозначает "все кроме ковычек". Любых. Обратные я тоже проверил.
Вот.
Нет на другие символы тоже реагирует, я ошибся. Получается, что в тексте между первым и последним символом не может встретиться того, что стоит рядом.
Пока не понимаю.
Посоветуйте что нибудь толковое почитать пожалуйста.
Спасибо. | |
|
|
|
|
|
|
|
для: Николай2357
(10.07.2008 в 15:50)
| | в гугле набираешь регулярное выражение и чиатешь все подряд. Мне самому, даже с немалой практикой, порой трудно до конца понять, как написать ту или иную регулярку., инет помогает. | |
|
|
|
|
|
|
|
для: GeorgeIV
(10.07.2008 в 16:33)
| | Спасибо. Я в Гугле второй день эту тему лопачу, там копирайт один (это так называется?). Времени жалко. Но все равно спасибо. | |
|
|
|
|
|
|
|
для: Николай2357
(10.07.2008 в 12:33)
| | Я только не понял, почему нельзя так
<?php
$text = 'Вова, "Вася", Петя, "Дима", Маша';
$str = preg_replace('/"/',"",$text);
print_r($str);
?>
| Или я не так понял? | |
|
|
|
|
|
|
|
для: GeorgeIV
(10.07.2008 в 13:09)
| | Текст очень длинный, и там все что угодно может встретиться. И одинарные ковычки в том числе. Нужно выдернуть именно нужные куски.
Да, и еще, это в JS мне нужно было.
Вот теперь порядок. | |
|
|
|
|
|
|
|
для: Николай2357
(09.07.2008 в 20:37)
| | >Как всетаки обозначить любой символ
* | |
|
|
|
|
|
|
|
для: AcidTrash
(09.07.2008 в 22:54)
| | столкнулся с чем-то похожим ,
вот например код должен считать сколько введено символов.
но после добавления перевода строки получается что добавилось два символа
, и второй не \r
<textarea name="text" rows="3" style="width:90%; padding:8px; font: bold 105% Arial;" onkeypress="cs(this);"></textarea>
<input type="submit" value="send"/>
<div>символов: <span id="cs">0</span></div>
<script type="text/javascript">
<!--
function cs(x){
x.value = x.value.replace(/\r?\n/mg, '\n')
var c = x.value.length + 1;
document.getElementById('cs').innerHTML= c;
}
//-->
</script>
|
| |
|
|
|
|
|
|
|
для: xx77
(10.07.2008 в 10:31)
| | в разных осях - разный конец строки, только в винде \r\n , в других используется по одному символу | |
|
|
|
|
|
|
|
для: GeorgeIV
(10.07.2008 в 10:40)
| | точно.
оказалось x.value = x.value.replace( .................. не давало результатов
просто надо считать без \r
var c = x.value.replace(/\r/g, '').length + 1;
|
| |
|
|
|