Что нового

Поиск заголовка окна по регулярному выражению

lightforever

Новичок
Сообщения
37
Репутация
2
Хочу произвести поиск окна по рег выражению. В руководстве написано, что это можно сделать Но я пытаюсь писать например так: $a=WinList("Te[se]*") - ничего не выдаёт, хотя такое окно есть( я так понимаю он понимает это как строку. Подумывал о том, что надо передать объект регулярного выражения, но String Reg Expression не подошёл, т.к. он требует текст, в котором будим делать поиск по шаблону.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
Re: Поиск по регулярному выражению

Попробуй так
Код:
$a=WinList("[REGEXPTITLE:Te[se]*]")
 

killbond

Осваивающий
Сообщения
96
Репутация
32
String Reg Expression не подошёл, т.к. он требует текст, в котором будим делать поиск по шаблону.
А почему бы в качестве требуемого текста этой функции не предоставить каждое имя окна? Вот:
Код:
#include <Array.au3>

$sString = "Выражение"

_ArrayDisplay (_GetRegExpWnd ($sString))

Func _GetRegExpWnd ($sExp)
	Local $avOrgnlWnds = WinList ()
	dim $avScndWnds [1] [2]
	For $iWndCntr = 1 to $avOrgnlWnds [0] [0]
		if StringRegExp ( $avOrgnlWnds [$iWndCntr] [0], $sExp, 0) then
			ReDim $avScndWnds [UBound($avScndWnds)+1] [2]
			$avScndWnds [UBound($avScndWnds)-1] [0] = $avOrgnlWnds [$iWndCntr] [0]
			$avScndWnds [UBound($avScndWnds)-1] [1] = $avOrgnlWnds [$iWndCntr] [1]
		EndIf
	Next
	$avScndWnds [0] [0] = UBound($avScndWnds)-1
	if Not @error then 
		Return $avScndWnds
	Else 
		Return 0
	EndIf
EndFunc


В этом случае синтаксис выражения будет таким же, как и у StringRegExp
 
Автор
L

lightforever

Новичок
Сообщения
37
Репутация
2
Для того и придумали регулярные выражения чтобы Такая запись
killbond сказал(а):
String Reg Expression не подошёл, т.к. он требует текст, в котором будим делать поиск по шаблону.
А почему бы в качестве требуемого текста этой функции не предоставить каждое имя окна? Вот:
Код:
#include <Array.au3>

$sString = "Выражение"

_ArrayDisplay (_GetRegExpWnd ($sString))

Func _GetRegExpWnd ($sExp)
	Local $avOrgnlWnds = WinList ()
	dim $avScndWnds [1] [2]
	For $iWndCntr = 1 to $avOrgnlWnds [0] [0]
		if StringRegExp ( $avOrgnlWnds [$iWndCntr] [0], $sExp, 0) then
			ReDim $avScndWnds [UBound($avScndWnds)+1] [2]
			$avScndWnds [UBound($avScndWnds)-1] [0] = $avOrgnlWnds [$iWndCntr] [0]
			$avScndWnds [UBound($avScndWnds)-1] [1] = $avOrgnlWnds [$iWndCntr] [1]
		EndIf
	Next
	$avScndWnds [0] [0] = UBound($avScndWnds)-1
	if Not @error then 
		Return $avScndWnds
	Else 
		Return 0
	EndIf
EndFunc


В этом случае синтаксис выражения будет таким же, как и у StringRegExp
Свелась к такой: $a=WinList("[REGEXPTITLE:Te[se]*]") :smile: :smile:
 

killbond

Осваивающий
Сообщения
96
Репутация
32
Свелась к такой: $a=WinList("[REGEXPTITLE:Te[se]*]")
Зато у StringRegExp возможности регулярных выражений шире! :laugh:

[ ... ] Match any character in the set. e.g. [aeiou] matches any lower-case vowel. A contiguous set can be defined using a dash between the starting and ending characters. e.g. [a-z] matches any lower case character. To include a dash (-) in a set, use it as the first or last character of the set. To include a closing bracket in a set, use it as the first character of the set. e.g. [][] will match either [ or ]. Note that special characters do not retain their special meanings inside a set, with the exception of \\, \^, \-,\[ and \] match the escaped character inside a set.
[^ ... ] Match any character not in the set. e.g. [^0-9] matches any non-digit. To include a caret (^) in a set, put it after the beginning of the set or escape it (\^).
[:class:] Match a character in the given class of characters. Valid classes are: alpha (any alphabetic character), alnum (any alphanumeric character), lower (any lower-case letter), upper (any upper-case letter), digit (any decimal digit 0-9), :rofl:igit (any hexadecimal digit, 0-9, A-F, a-f), space (any whitespace character), blank (only a space or tab), print (any printable character), graph (any printable character except spaces), cntrl (any control character [ascii 127 or <32]) or punct (any punctuation character). So [0-9] is equivalent to [[:digit:]].
[^:class:] Match any character not in the class, but only if the first character.
( ... ) Group. The elements in the group are treated in order and can be repeated together. e.g. (ab)+ will match "ab" or "abab", but not "aba". A group will also store the text matched for use in back-references and in the array returned by the function, depending on flag value.
(?i) Case-insensitivity flag. This does not operate as a group. It tells the regular expression engine to do case-insensitive matching from that point on.
(?-i) (default) Case-sensitivity flag. This does not operate as a group. It tells the regular expression engine to do case-sensitive matching from that point on.
(?: ... ) Non-capturing group. Behaves just like a normal group, but does not record the matching characters in the array nor can the matched text be used for back-referencing.
(?i: ... ) Case-insensitive non-capturing group. Behaves just like a non-capturing group, but performs case-insensitive matches within the group.
(?-i: ... ) Case-sensitive non-capturing group. Behaves just like a non-capturing group, but performs case-sensitive matches within the group.
(?m) ^ and $ match newlines within data.
(?s) . matches anything including newline. (by default "." don't match newline)
(?x) Ignore whitespace and # comments.
(?U) Invert greediness of quantifiers.
. Match any single character (except newline).
| Or. The expression on one side or the other can be matched.
\ Escape a special character (have it match the actual character) or introduce a special character type (see below).
\\ Match an actual backslash (\).
\a Alarm, that is, the BEL character (chr(7)).
\A Match only at beginning of string.
\b Matches at a word boundary.
\B Matches when not at a word boundary.
\c Match a control character, based on the next character. For example, \cM matches ctrl-M.
\d Match any digit (0-9).
\D Match any non-digit.
\e Match an escape character (chr(27)).
\E end case modification.
\f Match an formfeed character (chr(12)).
\h any horizontal whitespace character.
\H any character that is not a horizontal whitespace character.
\n Match a linefeed (@LF, chr(10)).
\Q quote (disable) pattern metacharacters till \E.
\r Match a carriage return (@CR, chr(13)).
\s Match any whitespace character: Chr(9) through Chr(13) which are Horizontal Tab, Line Feed, Vertical Tab, Form Feed, and Carriage Return, and the standard space ( Chr(32) ).
\S Match any non-whitespace character.
\t Match a tab character (chr(9)).
\v any vertical whitespace character.
\V any character that is not a vertical whitespace character.
\w Match any "word" character: a-z, A-Z, 0-9 or underscore (_).
\W Match any non-word character.
\### Match the ascii character whose code is given or back-reference. Can be up to 3 octal digits.
Match back-reference if found. Match the prior group number given exactly. For example, ([:alpha:])\1 would match a double letter.
\x## Match the ascii character whose code is given in hexadecimal. Can be up to 2 digits.
\z Match only at end of string.
\Z Match only at end of string, or before newline at the end.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
OffTopic:
killbond [?]
Зато у StringRegExp возможности регулярных выражений шире!
одинаковые у них возможности. REGEXPTITLE и StringRegExp - используют один и тот же движок PCRE



Добавлено:
Сообщение автоматически объединено:

lightforever
Если тема решена, отмечай ее таковой
 
Верх