lin6051 发表于 2022-2-9 09:44:05

求个匹配正则? 多个字符串 返回每个匹配的位置

#include <Array.au3>
$str='1234567②123个123们123①erereer'
$inc='①|②|的'
$aA=StringRegExp($str, $inc, 1)
msgbox(0,'',@Extended )


这样 只能得到 第一个'②' 的位置
我想 返回 数组   , $str里面 全部匹配$inc的位置.
求助
该怎么效率得到?


tubaba 发表于 2022-2-9 10:27:18

参考StringRegExp第四个参数offset
#include <Array.au3>



$str = '1234567②123个123们123①erereer'

$inc = '①|②|的'
Local $aFound

If StringRegExp($str, $inc) Then
        Local $nOffset = 1, $ext
        While 1
                $Res = StringRegExp($str, $inc, 1, $nOffset)
                If Not @error Then
                        $nOffset = @extended
                        _ArrayAdd($aFound, $nOffset)
                Else
                        ExitLoop
                EndIf
        WEnd
EndIf

_ArrayDelete($aFound, 0)
_ArrayDisplay($aFound)

lin6051 发表于 2022-2-11 15:58:00

tubaba 发表于 2022-2-9 10:27
参考StringRegExp第四个参数offset
#include



谢谢回复, 有没效率些的? 感觉这样 还不如用 StringInStr

chzj589 发表于 2022-2-12 09:57:05


#include <Array.au3>
Local $Res1
$str = "1234567,②,123,个,123,们,123,①,erereer"
Local $inc = "①|②|个"
Local $aDays = StringSplit($str, ",") ; 使用分隔符 "," 和默认标志值拆分字符串.
For $i = 1 To UBound($aDays) - 1
        If StringRegExp($aDays[$i], '(?mi)^\h*(' & $inc & ")$") Then
                $Res1 &= $aDays[$i] & @CRLF
        EndIf
Next
MsgBox(0, "", $Res1)
Local $aRE = StringRegExp($Res1, '(?mi)^\h*(' & $inc & ")$", 3)
_ArrayDisplay($aRE, " 显示")


kevinch 发表于 2022-2-12 10:17:58

这个试下
$str='1234567②123个123们123①erereer'
$regex=ObjCreate("vbscript.regexp")
$regex.global=True
$regex.pattern='①|②|的'
For $match In $regex.execute($str)
        ConsoleWrite($match.value&@tab&$match.firstindex+1&@tab&$match.length&@CRLF)
Next

afan 发表于 2022-2-12 12:44:18

kevinch 发表于 2022-2-12 10:17
这个试下

这个挺新颖啊~ {:1_625:}

kevinch 发表于 2022-2-12 17:09:46

afan 发表于 2022-2-12 12:44
这个挺新颖啊~

vbs的正则,vba里常用
页: [1]
查看完整版本: 求个匹配正则? 多个字符串 返回每个匹配的位置