VBScript Regex проблема - PullRequest
       1

VBScript Regex проблема

2 голосов
/ 06 мая 2011

У меня были серьезные проблемы с попыткой заставить мой Regex работать правильно, пытаясь извлечь UNC-путь. Я прочитал бесчисленные учебники, руководства и даже протестировал свои регулярные выражения в онлайн-тестерах регулярных выражений (где они, кажется, работают), но я все еще не могу заставить его работать в моем коде. Однако я могу заставить его работать на PHP, например.

Я использую PrimalScript, чтобы попытаться увидеть, что идет не так, подробнее об этом позже. Вот мой текущий код, который я использую:

Dim WSHShell, strString, nrMatches, myMatches

Set WSHShell = CreateObject("WScript.Shell")
Set myRegExp = New RegExp
myRegExp.IgnoreCase = True
myRegExp.Global = True
' myRegExp.Pattern = "^\\\\(.*?)+\\(.*)*\s...\\(.*)*$"  <-- Returns 1 match, the whole String
' myRegExp.Pattern = "^\\\\(\w?)+\\(\w)*\s...\\(\w)*$"  <-- Returns 0 matches
' myRegExp.Pattern = "^\\\\(.*?)+\\\(.*)*\s...\\\(.*)*$"  <-- Gives Syntax Error
' myRegExp.Pattern = "^\\\\\\\\(.*?)+\\\(.*)*\s...\\\(.*)*$" <-- Gives Syntax Error
' myRegExp.Pattern = "^\\\\(.*)\\(.*)\s\.\.\.\\(.*)?$"  <-- Returns 1 match, the whole String
myRegExp.Pattern = "^(.*)+\\(.*)+(\s\.\.\.\\(.*))?$" ' <-- Returns 1 match, the whole String

strString = "\\domain.subnet.net\share1 ...\share2"

Set myMatches = myRegExp.Execute(strString)
nrMatches = myMatches.Count
MsgBox "Found " & nrMatches & " Matches!", vbOKOnly, "Number of Matches"
For Each myMatch In myMatches
    MsgBox "Value: " & myMatch.Value, vbOKOnly, "Found Match"
Next
WScript.Quit

Регулярные выражения с комментариями - это лишь малая часть того, что я пробовал, это те, с которыми у меня был «самый» успех.

Одна вещь, которая привлекла мое внимание, заключалась в том, что во время отладки в PrimalScript он в основном говорил мне, что myMatches.Item = Неверное количество параметров Поиск в Google ничего не дал, хотя, может быть, кто-то здесь знает, какие параметры нужны для Execute? Я мог бы предоставить скриншот этого при необходимости, просто дайте мне знать.

Спасибо, я буду благодарен за любые советы или подсказки, которые помогут мне в этом =)

Ответы [ 2 ]

1 голос
/ 06 мая 2011

Я не уверен, что вы ожидаете.

Хотите ли вы привести strString = "\\domain.subnet.net\share1 ...\share2" в 2 матчах? (Будет ли ... \ share2 правильным путем?)

Если в вашей строке есть только пути, разделенные пробелами, вы можете попробовать:

[^\s]+ см. рубуляр

или

[\\\w.]+ см. рубуляр

или если оно должно начинаться с \\ или .

(?<=\A|\s)(?:\\|\.)[^\s]+ см. Regexr (поскольку Rubular не поддерживает взгляды сзади)

UPDATE:

Согласно вашим комментариям, я надеюсь, что это будет делать то, что вы хотите:

^((?:\\|\.)[^\s]+)\\[^\\\s]+\s+\.{3}([^\s]*)

Rubular

Вы найдете путь до последнего \ в группе 1 и часть, следующую за ... в группе 2. Поэтому, чтобы получить замену, вам нужно просто объединить группу 1 и группу 2.

1 голос
/ 06 мая 2011

Помогает ли что-то подобное?

http://regexlib.com/REDetails.aspx?regexp_id=2396

Кажется, они предлагают

^ [A-Za-Z] \:. \ *. * 1008 | ^ \\

я тоже видел (?: <? (\\ [- \ д \ ш \\ S] +)>) | (\\ [- \ д \ ш \] +) в поиске Google.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...