Что нового

[Regexp] как заменить сноски на текст внутри

mikzin

Новичок
Сообщения
80
Репутация
0
здравствуйте,

подскажите плиз, как найти в тексте и заменить все сноски, что в квадр. скобах (каждый номер заменить на соответствующую сноску),а то я в этих рег. выражениях не сильно разбираюсь ((
так не работает:
Код:
$replaced = StringRegExpReplace($sString, '\[\d\]', 'title=".+?">)')

допустим есть так:
Код:
<p class="book">– Mais, monsieur<sup><a name=r3><a href="#note_3" title="
Но, месье (фр.).">[3]</sup>
а надо чтобы стало так:
Код:
<p class="book">– Mais, monsieur<sup><a name=r3><a href="#note_3" title="
Но, месье (фр.).">[Но, месье (фр.).]</sup>

файл
http://depositfiles.com/files/unewxopbp
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
370
Такой вариант:
Код:
$sText = '<p class="book">– Mais, monsieur<sup><a name=r3><a href="#note_3" title="Но, месье (фр.).">[3]</sup>13123123123123<p class="book">– Mais, monsieur<sup><a name=r3><a href="#note_3" title="Да, месье (фр.).">[4]</sup>'
ConsoleWrite($sText & @CRLF)
$sPattern = '(?si)(title=")([^"]+)(">)([^<]+)'
$sText = StringRegExpReplace($sText, $sPattern, '$1$2$3$2')
ConsoleWrite($sText & @CRLF)


подправил чуть...

Полный скрипт:
Код:
$hFile = FileOpen('c:\davincicode.html', 0)
$sText = FileRead($hFile)
FileClose($hFile)
$sPattern = '(?sim)(title=")([^"]+)("[^>]+>)([^<]+)'
$sText = StringRegExpReplace($sText, $sPattern, '$1$2$3$2')
$hFile = FileOpen('c:\out.html', 2)
FileWrite($hFile, $sText)
FileClose($hFile)
 
Автор
M

mikzin

Новичок
Сообщения
80
Репутация
0
Redline,
вот спасибо вам,работает :ok:
как бы еще сделать, чтобы выходящий текст в квадратных кавычках оставался..
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
370
В тексте попадаются сноски и в фигурных скобках:
Код:
<p class="book">&ndash; Он отравлен?<sup><a name="r6"></a><a title="
Он отравлен? &mdash; Расположено? (Positioned?) -- N.
" href="#n_1">{1}</a></sup> &ndash; предположил агент.</p>
Переделал и с учетом и таких сносок, надуюсь они бывают только в виде цифр:
Код:
$hFile = FileOpen('c:\davincicode.html', 0)
$sText = FileRead($hFile)
FileClose($hFile)
$sPattern = '(?sim)(title=")([^"]+)([^>]+>.)(\d+)(.)'
$sText = StringRegExpReplace($sText, $sPattern, '$1$2$3$2$5')
$hFile = FileOpen('c:\12.html', 2)
FileWrite($hFile, $sText)
FileClose($hFile)
 
Автор
M

mikzin

Новичок
Сообщения
80
Репутация
0
Redline, спасибо Вам еще раз огромное!я бы сам до этих регулярок вряд-ли допер ...
теперь, благодаря Вам читать печатные тексты станет намного удобнее, не надо будет постоянно в конец текста шариться )) :smile:

не будет большой наглостью спросить, если попадется книга где в тексте много сносок, напр. http://lib.rus.ec/b/160882/read
скриптом обработается?
 

Redline

AutoIT Гуру
Сообщения
506
Репутация
370
mikzin [?]
если попадется книга где в тексте много сносок, напр. http://lib.rus.ec/b/160882/readскриптом обработается?
Проблемы могут возникнуть только если измениться сам формат сносок (цифры в квадратных или фигурных скобках), а их количество может повлиять только на скорость выполнения скрипта.
И вообще, что вам мешает проверить этот скрипт на сложной книге? ;)
 
Верх