我想解析c#cs文件中的名称空间,例如using System.Collections.Generic
我想捕获组(System
)(Collections
)(Generic
)。
到目前为止,我编写了以下正则表达式:"[ .]?(\w*?)(?=[.;])"
因此,我必须添加以下条件:该行以“ using
”开头。
我尝试添加此"using[ .]?(\w*?)(?=[.;])"
,但它只会捕获第一个名称空间。
有输入文字
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Text.RegularExpressions;
string someString;
Console.ReadLine();
更新:
很抱歉,我没有首先提到它,但是还有另外一件事,方法也会发生同样的事情,例如Console.ReadLine()
不应该返回ReadLine
。对于所有未使用的点都相同
答案 0 :(得分:2)
要开始从特定点开始匹配重复模式,您会发现\G
令牌很有帮助:
(?m)(?:^using +|\G(?!^)\.)\K\w+
正则表达式细目:
(?m)
启用多行模式(?:
非捕获组的开始
^using +
在行尾空格处匹配using
|
或
\G(?!^)
从上一场比赛结束的地方开始比赛\.
匹配句号)
非捕获组的结尾\K
重置输出\w+
匹配单词序列答案 1 :(得分:0)
您可以使用此(using |[.])(\w+)
答案 2 :(得分:0)
更新:以下正则表达式
undefined
将为您提供如下结果
(?<=using\s)(\w*(?=[.;]))|\G(\w*(?=[;.]))
正向(?<=using\s)
和using
空白后面
\s
匹配(\w*(?=[.;]))
或.
之前的任何单词字符
;
在上一场比赛的结尾声明位置。
\G
重复匹配(\w+(?=[.;]))
或.
之前的任何单词字符
答案 3 :(得分:0)
您可以使用正则表达式:
(?<=^using\s)((?:\w+)(?:[.](?:\w+))*)(?=;)
输入:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Text.RegularExpressions;
string something;
abc.something;
Console.WriteLine(".test.');
匹配项:
System
System.Collections.Generic
System.Linq
System.Text
System.IO
System.Text.RegularExpressions
然后在每个匹配项上使用该函数来提取每个中间模块:
$submodules= explode(".", $match);
演示:
https://regex101.com/r/p0K3dN/4/
代码示例:
$input="
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Text.RegularExpressions;
string something;
abc.something;
Console.WriteLine('.test.');
";
preg_match_all('/(?<=using\s)(?:\w+)(?:[.](?:\w+))*(?=;)/m', $input, $matches);
foreach($matches as $modules)
foreach($modules as $module)
print_r(explode(".",$module));
结果:
Array
(
[0] => System
)
Array
(
[0] => System
[1] => Collections
[2] => Generic
)
Array
(
[0] => System
[1] => Linq
)
Array
(
[0] => System
[1] => Text
)
Array
(
[0] => System
[1] => IO
)
Array
(
[0] => System
[1] => Text
[2] => RegularExpressions
)