尝试通过REGEX匹配文本

zpf6vheq  于 2023-05-08  发布在  其他
关注(0)|答案(4)|浏览(124)

第一次发帖,需要一点帮助,我正试图想出一个正则表达式匹配。
这是我的格式

|user|DOMAIN\user|

我试图写一个正则表达式匹配,将只捕获用户名,然后只捕获域。
我的想法是首先匹配所有的文本,然后创建(3)组?基于此我就能得到我要的信息
建议?举个例子?

tp5buhyn

tp5buhyn1#

在这里使用非贪婪量词对可读性有很大帮助:

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

产出

glenn:JACKMAN
vqlkdk9b

vqlkdk9b2#

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

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

eagi6jfj3#

如果你没有使用正则表达式匹配的约束,我建议你在管道处拆分字符串。这样,您的第一个或第二个标记(取决于给定语言如何处理第一个管道之前的空标记)将是user。现在您可以从下一个标记的末尾删除[length(user)+ 1]子字符串。这将为您提供域。
请注意,这里的假设是user或DOMAIN不包含任何管道字符(|).

4uqofj5v

4uqofj5v4#

这也是匹配用户名和域的另一个选项。
% set data {|格伦|JACKMAN\glenn|}
|格伦|JACKMAN\glenn|
% regexp {^|([^|]+)|([^]+).} $data m a B
1
% puts“--- a $a ----B $b----”
--- a格伦----B杰克曼----
另一种方法是精确匹配。
% regexp {^|([A-z]+)|([A-z]+).
} $data m a B
1
% puts“match $m--- a $a ----B $b----”
匹配|格伦|JACKMAN\glenn|--- a格伦----B杰克曼----

相关问题