Начал разбираться с регулярными выражениями но ничего не получилось.
Помогите разобраться.
В массиве строк $aString надо найти все строки которые удовлетворяют условиям.
1. Регулярное выражение для поиска всех х86
2. Регулярное выражение для поиска всех х64
3. Почему если строка и подстрока на русском не работает независимость от регистра (?i)
Помогите разобраться.
В массиве строк $aString надо найти все строки которые удовлетворяют условиям.
1. Регулярное выражение для поиска всех х86
2. Регулярное выражение для поиска всех х64
3. Почему если строка и подстрока на русском не работает независимость от регистра (?i)
Код:
#include <String.au3>
#include <Array.au3>
Global $i
Global $sRegExp86
Global $sRegExp64
;Поиск в строке нескольких подстрок
Global $sSubStr1 = "Windows" ;1 - Подстрока всегда есть
Global $sSubStr2 = "Professional" ;2- Может быть и = ""
;Подстроки 3-4 - независимо от положения в строке, тк может их и не быть или располагаться произвольно в строке
Global $sSubStr3 = "(?:x64|64-bit)" ; Исключить из поиска x64 или 64-bit, для поиска x86
Global $sSubStr4 = "(x64|64-bit)"
; примеры строк
Global $aString[7] = ["Windows 1 Professional", _ ;x86
"Windows 2 Professional (x86)", _ ;x86
"Windows 3 (x86) Professional", _ ;x86
"Windows 4 Professional (x64)", _ ;x64
"Windows 5 Professional x64", _ ;x64
"Windows 6 (x64) Professional", _ ;x64
"Windows 7 Professional (64-bit)"] ; x64
;Вопрос 1
;Регулярное выражение с привязкой к положению подстрок
$sRegExp86 = '(?i)(' & $sSubStr1 & '.*' & $sSubStr2 & ')' & '.*' & $sSubStr3 ; не правильно задан $sSubStr3
$sRegExp64 = '(?i)(' & $sSubStr1 & '.*' & $sSubStr2 & ')' & '.*' & $sSubStr4
;Вопрос 2
;Регулярное выражение без привязки к положению подстрок $sSubStr3 и $sSubStr4
; Незнаю как
;$sRegExp86 = ?????
;$sRegExp64 = ?????
;Вопрос 3
; Если строка и подстрока на русском не работает независимость от регистра (?i)
MsgBox(0, "", 'Результат поиска в строке "Как дела" подстроки "(?i)как" =' & StringRegExp("Как дела", "(?i)как"))
; Показать все результаты подходящие для x86
For $i = 0 To UBound($aString) - 1
TestRegExp($aString[$i], $sRegExp86, "x86")
Next
; Показать все результаты подходящие для x64
For $i = 0 To UBound($aString) - 1
TestRegExp($aString[$i], $sRegExp64, "x64")
Next
; Вернуть 1 если все подстроки найдены или удовлетворяют условию
Func TestRegExp($sString, $sSubStrRegExp, $sTitle = "")
Local $flag = 0
Local $Res
ConsoleWrite($sSubStrRegExp & @CRLF)
$Res = StringRegExp($sString, $sSubStrRegExp, $flag)
;If $flag Then _ArrayDisplay($Res,$sTitle)
If Not $flag Then
;Если в строке найдены все подстроки то показать сообщение
If $Res Then MsgBox(0, $sTitle, $sSubStrRegExp & @CRLF & $sString)
EndIf
EndFunc ;==>TestRegExp