Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 23.05.2014, 15:47
SvetozarPNZ вне форума Посмотреть профиль Отправить личное сообщение для SvetozarPNZ Найти все сообщения от SvetozarPNZ
  № 1  
Ответить с цитированием
SvetozarPNZ
 
Аватар для SvetozarPNZ

Регистрация: Dec 2009
Сообщений: 125
Записей в блоге: 1
По умолчанию Конструкция .+? в регулярном выражении

Что означает такая конструкция
Код AS3:
.+?
в регулярном выражении?

Нашел ее, когда искал как выявлять ссылки из html-кода.

На мой взгляд она аналогична
Код AS3:
.*
Но если меняешь, то ничего не работает.

Пример для тестирования.

Код AS3:
package 
{
	import flash.events.Event;
	import flash.net.*;
	import flash.display.*;	
 
	public class Main extends MovieClip
	{
		var loader:URLLoader = new URLLoader();
		var str:String= '';
		var regExp = /<a([^>]+)>(.+?)<\/a>/gis;
		public function Main()
		{			
 
			var pageLink:URLRequest = new URLRequest("http://technoflash.ru");
			loader.load(pageLink);
			loader.addEventListener(Event.COMPLETE, onComplete);
		}
		function onComplete(event:Event):void
		{			
			trace(loader.data.match(regExp))
		}
	}
}
Мне посоветовали сервис http://www.regexr.com/ для тестирования регексов. Так вот там подмена
Код AS3:
.+?
на
Код AS3:
.*
не меняет результата, что еще больше меня путает.

Старый 23.05.2014, 15:56
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 2  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Цитата:
.+?
Цитата:
.*
Логически аналогичны. В первом "любой символ в количестве 1+ штук, которого может не быть". Во втором: "любой символ в количестве 0+ штук".
__________________
тут я

Старый 23.05.2014, 16:08
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 3  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
М. Секунду. Я проверил, первая регулярка вытаскивает только один символ, тогда как вторая может вытащить многим больше.
Код AS3:
.* === (.+)?
.* !== .+?
Добавлено через 1 минуту
Символ "?" применителен для одного символа или группы. Поэтому нужно ему подавать группу, без нее он вытаскивает лишь один символ.
__________________
тут я

Старый 23.05.2014, 16:19
SvetozarPNZ вне форума Посмотреть профиль Отправить личное сообщение для SvetozarPNZ Найти все сообщения от SvetozarPNZ
  № 4  
Ответить с цитированием
SvetozarPNZ
 
Аватар для SvetozarPNZ

Регистрация: Dec 2009
Сообщений: 125
Записей в блоге: 1
А что ж во втором это значит, что ? вообще не работает?

Старый 23.05.2014, 16:22
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 5  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Честно говоря, я не разбирался в Вашей полной регулярке, я протестировал конкретный этот кусочек. В моем тесте ".+?" вытаскивает не более одного символа, что, в принципе, логично.
Какое поведение Вы у себя наблюдаете?
__________________
тут я

Старый 23.05.2014, 16:31
SvetozarPNZ вне форума Посмотреть профиль Отправить личное сообщение для SvetozarPNZ Найти все сообщения от SvetozarPNZ
  № 6  
Ответить с цитированием
SvetozarPNZ
 
Аватар для SvetozarPNZ

Регистрация: Dec 2009
Сообщений: 125
Записей в блоге: 1
Наблюдаю, то, что и хочу получить
Цитата:
<a href="http://technoflash.ru" title="На главную"><img src="img/logo.png" width="277" height="37" alt="technoflash.ru" /></a>,<a href="http://technoflash.ru" title="На главную"><img src="img/logo.png" width="277" height="37" alt="technoflash.ru" /></a> и т.д.
Не понимаю, почему я это получаю ))

Добавлено через 11 минут
Все нашел-нашел-нашел! Разобрался:
Цитата:
Добавьте знак вопроса (? после любого квантификатора, чтобы изменить его на то, что известно как «ленивый» квантификатор.
Получается, что в моем примере вопросительный знак для конструкции (.+?) способствует нахождению как можно меньшее число символов, подходящих под шаблон.


Последний раз редактировалось SvetozarPNZ; 23.05.2014 в 16:44.
Старый 23.05.2014, 18:20
MikroAcse вне форума Посмотреть профиль Отправить личное сообщение для MikroAcse Найти все сообщения от MikroAcse
  № 7  
Ответить с цитированием
MikroAcse
 
Аватар для MikroAcse

Регистрация: Feb 2012
Сообщений: 1,540
Кратко:
Есть строка "abaca".
Есть регулярка /a((.+)?)a/
Она выдаст тебе "b".
Без знака вопроса (/a(.+)a/) она выдаст "bac".

Старый 23.05.2014, 19:36
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 8  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Цитата:
Получается, что в моем примере вопросительный знак для конструкции (.+?) способствует нахождению как можно меньшее число символов, подходящих под шаблон.
Интересно, про еще один смысл "?" не знал, если использовать его с квантификаторами.

2MikroAcse, ты не о том. Обрами свои регулярки в ^ И $ и увидишь, что у тебя они идентичны, так как ты используешь "?" для группы. И в первой регулярке можно смело снести внешнюю пару скобок, чтобы итоговый результат не давал лишнее совпадение.
__________________
тут я

Старый 23.05.2014, 23:04
MikroAcse вне форума Посмотреть профиль Отправить личное сообщение для MikroAcse Найти все сообщения от MikroAcse
  № 9  
Ответить с цитированием
MikroAcse
 
Аватар для MikroAcse

Регистрация: Feb 2012
Сообщений: 1,540
КорДум, ага. Спасибо за пояснения.

Создать новую тему Ответ Часовой пояс GMT +4, время: 10:45.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 10:45.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.