尝试通过 REGEX 匹配文本

Trying to match text via REGEX

第一次发帖,需要一些关于正则表达式匹配的帮助。

这是我的格式

|user|DOMAIN\user|

我正在尝试编写一个只捕获用户名的正则表达式匹配,然后只捕获域。

我的思路是先匹配所有文本,然后创建(3)组?基于此我将获得我正在寻找的信息。

建议?例子?

如果您没有使用正则表达式匹配的限制,我建议您在管道处拆分字符串。这样,您的第一个或第二个令牌(取决于给定语言如何处理第一个管道之前的空令牌)将是用户。现在您可以从下一个标记的末尾删除 [length(user) + 1] 子字符串。这将为您提供域。

请注意,这里的假设是用户或域不包含任何竖线字符 (|)。

您正在寻找这样的正则表达式:

\|([^|]+)\|([^\]+)\([^|]+)\|

您可以在此处查看实际效果:http://refiddle.com/2we4

使用 non-greedy 量词有助于提高此处的可读性:

set data {|glenn|JACKMAN\glenn|}
regexp  {^\|(.*?)\|(.*?)\} $data -> user domain
puts "$user:$domain"

产出

glenn:JACKMAN

这也是匹配用户名和域的另一个选项。

%设置数据{|glenn|JACKMAN\glenn|}

|格伦|JACKMAN\glenn|

% regexp {^\|([^|]+)\|([^\]+).*} $data m a b

1

% 放“--- a $a ----b $b----”

--- 格伦 ----b 杰克曼----

精确匹配的另一种方式。

% 正则表达式 {^\|([A-z]+)\|([A-z]+)\.*} $data m a b

1

% 放 "match $m--- a $a ----b $b----"

匹配 |glenn|JACKMAN\glenn|--- a glenn ----b JACKMAN----