351

Re: AHK: Регулярные выражения

К примеру, я указал: искать от <DIV ID="COMPOSER — до </A></DIV></DIV>, с условием, чтобы между ними не было тега <abbr>. При этом, и <DIV ID="COMPOSER и </A></DIV></DIV>, находятся в нижнем регистре и в моём шаблоне и в тексте. Так почему должно иметь значение регистр того, что между ними (точки)?

352

Re: AHK: Регулярные выражения

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

353 (изменено: DD, 2018-10-25 14:40:01)

Re: AHK: Регулярные выражения

Выше они рассматривались. Вот так, в зависимости от разницы опций is/s — работает/не работает:

str = 
(
</div></div></div></div></div></div><div></div><DIV ID="COMPOSER-123456789"><FORM><INPUT /><INPUT /><LABEL>_</LABEL><TABLE><TBODY><TR><TD><DIV><TABLE><TBODY><TR><TD><TEXTAREA ID="COMPOSERINPUT"></TEXTAREA></TD></TR></TBODY></TABLE></DIV></TD><TD><DIV><INPUT /></DIV></TD></TR></TBODY></TABLE></FORM><FORM><INPUT /><INPUT /><SPAN><INPUT /><SPAN></SPAN><INPUT /></SPAN></FORM></DIV></DIV></DIV></DIV><DIV><DIV><DIV><IMG /><DIV><DIV><A>_</A><A>_</A><A>_</A></DIV></DIV></DIV></DIV></DIV></DIV></DIV><DIV><DIV><A>_</A></DIV></DIV></div></div></body></html>
)
RegExMatch(str, "is)<DIV ID=""COMPOSER(?:(?!<abbr>).)*</a></div></div>", match)
MsgBox, % match

354

Re: AHK: Регулярные выражения

У вас же всё капслоком прописано.

RegExMatch(str, "<DIV ID=""COMPOSER(?:(?!<abbr>).)*</A></DIV></DIV>", match)

355 (изменено: DD, 2018-10-25 15:00:04)

Re: AHK: Регулярные выражения

Дело в том, что на реальном примере из файла, в котором, как и в шаблоне, всё было в нижнем регистре — не работало. Но теперь понял, что помимо is — нужна ещё точка перед последней звездочкой: «(?:(?!НЕЭТО).).*».

356

Re: AHK: Регулярные выражения

Как одним выражением находить слово, и слово с тэгами? —

«слово»
«сл<em>о</em>во»

357

Re: AHK: Регулярные выражения

Как находить только кириллицу, в которой также может присутствовать единица или англ. буква I? Пробовал в т.ч. так: «[А-Яа-яЁёI1]+», но всё не то.

358

Re: AHK: Регулярные выражения

А, так вроде надо было:

\b([А-Яа-яЁёI1][А-Яа-яЁёI1]*)\b

359 (изменено: DD, 2019-03-26 00:43:28)

Re: AHK: Регулярные выражения

Как настроить выражение, чтобы не захватывалось содержимое внутри тегов? —

Str = 
(
^journalist COLUMNS Released  accuses own lawyers of political show    
COLUMNS Political stalem ate123456789 injjkk Europe    
Frankly, had Masoud Barzani foreseen the course of developments in the recent period, he definitely would have given up the idea of holding an independence referendum. With the public's pressure and expectations regarding the referendum, Barzani went to the polls to prove his leadership. • Yet, what happened over the past 10 days jeopardized his position in the Kurdistan region, let alone consolidating his leadership <p> <a href="http://www.bibliotecapleyades.net/sociopolitica/esp_sociopol_denver02.htm" rel="nofollow"></a><a href="http://www.bibliotecapleyades.net/sociopolitica/e" rel="nofollow">http://www.bibliotecapleyades.net/sociopolitica/e</a>&#8230; </p> But how did the developments end up here? How did Barzani make such wrong calculations what did he depend on? And most importantly, what is awaiting the Iraqi Kurdistan Regional Government (KRG) from now on?
While aspiring to make Kirkuk the capital city of Kurdistan$ It plays out almost as a parody. Bill Nye has certainly become very judgmental, intolerable and rude in his own right.

)
StartPos := 1
While StartPos := RegExMatch(Str, "(.{1,500}.+?([,;:—\?\!\n\.]+\s*|$))", Found, StartPos) + StrLen(Found)
   MsgBox, %Found1%

360

Re: AHK: Регулярные выражения

А что должно захватываться?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

361 (изменено: DD, 2019-03-26 01:30:45)

Re: AHK: Регулярные выражения

Захватываться должно вне тегов — до перечисленных символов, когда они есть. Если не захватится — тоже результат).

362

Re: AHK: Регулярные выражения

Я не очень понял вашу регулярку. Можно просто теги удалить — останется то, что вне их.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

363 (изменено: DD, 2019-03-26 02:08:30)

Re: AHK: Регулярные выражения

Там сначала захватывается от 1 до 500 символов, и уже после этого ищется ближайший перечисленный стоп-символ (что позволяет не выходить за заданный лимит символов). Здесь был разговор — viewtopic.php?pid=125492#p125492. К примеру, ниже после первого слова "journalist" и до самого конца, текст представляет собой условный тег. И задача в том, чтобы поиск останавливался на слове журналист, не заходя в пределы ломаных скобок —

Str = 
(
^journalist <COLUMNS Released  accuses own lawyers of political show    
COLUMNS Political stalem ate123456789 injjkk Europe    
Frankly, had Masoud Barzani foreseen the course of developments in the recent period, he definitely would have given up the idea of holding an independence referendum. With the public's pressure and expectations regarding the referendum, Barzani went to the polls to prove his leadership. • Yet, what happened over the past 10 days jeopardized his position in the Kurdistan region, let alone consolidating his leadership But how did the developments end up here? How did Barzani make such wrong calculations what did he depend on? And most importantly, what is awaiting the Iraqi Kurdistan Regional Government (KRG) from now on?
While aspiring to make Kirkuk the capital city of Kurdistan$ It plays out almost as a parody. Bill Nye has certainly become very judgmental, intolerable and rude in his own right.>

)
StartPos := 1
While StartPos := RegExMatch(Str, "(.{1,500}.+?([,;:—\?\!\n\.]+\s*|$))", Found, StartPos) + StrLen(Found)
   MsgBox, %Found1%

364

Re: AHK: Регулярные выражения

DD пишет:

чтобы поиск останавливался на слове журналист

Именно останавливался, или чтоб продолжался после тега?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

365

Re: AHK: Регулярные выражения

Останавливался.

366 (изменено: teadrinker, 2019-03-26 02:56:03)

Re: AHK: Регулярные выражения

Замените первую и вторую точки на [^<]

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

367 (изменено: DD, 2019-03-26 03:53:24)

Re: AHK: Регулярные выражения

Если я правильно заменил, так захватывается текст из тега, — а нужен тот, что перед тегом, чтобы текст не делился внутри тега, но перед ним.

368

Re: AHK: Регулярные выражения

Да, дезинформировал. Если нужно, чтобы поиск останавливался на первом теге, можно просто предварительно удалить всё, начиная с первого тега.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

369

Re: AHK: Регулярные выражения

Но удаленное потом будет нужно, чтобы продолжить после тега.

370

Re: AHK: Регулярные выражения

Так вы же сказали, что нужно, чтобы останавливался? Если нет, тогда предварительно удалите все теги:

MsgBox, % Str := RegExReplace(Str, "<[^>]+>")
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

371

Re: AHK: Регулярные выражения

А в выражении это нельзя предусмотреть, так как если удалить теги, это уже не будет HTML).

372

Re: AHK: Регулярные выражения

Так вы же их не насовсем удаляете, только для поиска. Сохранять с удалёнными тегами не нужно.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg

373 (изменено: DD, 2019-03-29 18:03:01)

Re: AHK: Регулярные выражения

Как для части выражения — <p><strong>.{1,150}[^\.]</strong></p> — правильно задать обработку только в случае, если содержимое тегов короче 150 символов и не заканчивается точкой?

post_only=
(
<p><strong>The YouTube channel of&nbsp;an artist named That Poppy has been mystifying viewers for years. Behind the weirdness of her videos is a disturbing story: The mind control of a young pop star.</strong></p>

<p><strong>The YouTube channel of&nbsp;an artist named.</strong></p>

<p><strong>The YouTube channel of&nbsp;an artist named</strong></p>

<p><strong>The YouTube channel of&nbsp;an artist named
</strong></p>

)
match := ""
while RegExMatch(post_only, "iO)(<h1|<h2|<h3|<h4|<h5|<p><strong>.{1,150}[^\.]</strong></p>)", match, match ? match.Pos + match.Len + 18 : 1)
   post_only := RegExReplace(post_only, match[0], "<a name=""vc_" . A_Index . """></a>" . match[0],, 1, match.Pos)

MsgBox % post_only

374 (изменено: KusochekDobra, 2019-03-29 19:42:28)

Re: AHK: Регулярные выражения

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


post_only =
(
<p><strong>The YouTube channel of&nbsp;an artist named That Poppy has been mystifying viewers for years. Behind the weirdness of her videos is a disturbing story: The mind control of a young pop star.</strong></p>

<p><strong>The YouTube channel of&nbsp;an artist named.</strong></p>

<p><strong>The YouTube channel of&nbsp;an artist named</strong></p>

<p><strong>The YouTube channel of&nbsp;an artist named
</strong></p>

)
For i, item in DoMatch(post_only, "<p><strong>") {
	RegExMatch(item, "<p><strong>(.*)</strong></p>", m)
	if (( len := StrLen(m1)) < 150 && (lastChar := SubStr(m1, len)) != ".")
		MsgBox % Format("Удачно срослось!`nВсего '{}' символов и последний '{}'`n`n'{}'", len, lastChar, m1)
	else
		MsgBox % Format("Не срослось. :(`nВсего '{}' символов и последний '{}'`n`n'{}'", len, lastChar, m1)
}
ExitApp

DoMatch(str, reg_ex) {
	arr := [], p1 := p2 := 1, match := ""
	While (p2 := RegExMatch(str, reg_ex, match, p2 + StrLen(match))) {
		(A_Index > 1 && arr.Push( SubStr(str, p1, p2 - p1) ))
		p1 := p2
	} arr.Push( SubStr(str, p1, StrLen(str) - p1) )
	Return arr
}

lastChar не будет получен, если первое условие в if возвращает false.

+ DD

375

Re: AHK: Регулярные выражения

DD пишет:
(<h1|<h2|<h3|<h4|<h5|<p><strong>.{1,150}[^\.]</strong></p>)

Я не понял, что это должно означать. Между чем и чем тут выбор? Зачем весь паттерн взят в скобки?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Skype dmitry_fiveg