Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Возвращаясь к задаче поиска вхождений заданного слова в произвольный текст. Выше я дал маху утверждая, что AutoIT не поддерживает регулярные выражения... хотя с русским опять облом - если метасимволы \l \u \w еще работают, то (?i) ни в какую...

StringRegExp - Check if a string fits a given regular expression pattern.
StringRegExpReplace - Replace text in a string based on regular expressions.

вариант поиска слова с использованием регулярных выражений (на основе скрипта Sanja Alone):
Код: Выделить весь код
#include <File.au3>

$fileInput = 'file.txt'
$wordToFind= 'исКать'

$find = _FindTextInFile ($fileInput,$wordToFind)
If $find Then
	MsgBox (0, 'Поиск слова в файле',  'Слово "' & $wordToFind & '" найдено в ' & $find & '-й строке.')
Else
	MsgBox (0, 'Поиск слова в файле',  'Слово "' & $wordToFind & '" в файле не обнаружено.')
EndIf

Func _FindTextInFile ($ifile, $word)
	Local $i, $a, $ret=0
	_FileReadToArray($ifile, $a)
	For $i=1 To Ubound ($a)-1
		If StringRegExp ($a [$i], _WordToReg ($word) ) Then
			Return $i
		EndIf
	Next
	Return 0
EndFunc

; перевод произвольного слова в регулярное выражение
; требуется для поддержки русских слов, так как (?i)
; воспринимает только регистры английских букв;
; пример: "Кот" --> "\<[кК][оО][тТ]\>"

Func _WordToReg ($word)
	Local $i, $c, $w=""
	If StringIsASCII($word) Then
		Return '(?i)\<' & $word & '\>'
	Else
		For $i=1 To StringLen($word)
			$c = StringMid ($word, $i, 1)
			If StringLower($c) == StringUpper($c) Then
				$w=$w & $c
			Else
				$w=$w & '[' & StringLower($c) & StringUpper($c) & ']'
			EndIf
		Next
		Return '\<' & $w & '\>'
	EndIf
EndFunc

Отправлено: 11:21, 03-09-2006 | #347