问题描述
我想使用正则表达式从源代码中提取信息。您能帮我建立一个RegEx来检索源代码上使用的单位吗?。
源代码示例:
unit Comandesvendes;
interface
uses
Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,Dialogs,Manteniment;
type
TFComandesvendes = class(TFManteniment,ActualitzacioFinestra)
QRCapsaleraNumero: TIntegerField;
QRCapsaleraData: TDateTimeField;
QRCapsaleraDataEntrega: TDateTimeField;
...
...
我需要获取从uses
子句到下一个;
为止的逗号分隔文件名。在该示例中,输出必须为:
Windows
Messages
SysUtils
Variants
Classes
Graphics
Controls
Forms
Dialogs
Manteniment
我正在尝试类似
^ *uses(\n* *(\w*),)* *\n* *(\w*) *;
它与uses子句匹配,但不会单独返回每个文件名。
谢谢。
解决方法
在this page,它表示Delphi使用PCRE正则表达式。
在这种情况下,一种选择是将捕获组与\G
锚点结合使用。
(?:^ *uses\r?\n *|\G(?!^))(\w+)(?:,\s*|;$)
说明
-
(?:
非捕获组-
^ *uses\r?\n *
从字符串的开头匹配可选的空格,然后匹配并换行,并再次跟上可选的空格 -
|
或 -
\G(?!^)
在上一个匹配项的末尾而不是开始处声明位置(\G
锚点在字符串的开头或上一个匹配项的两个位置处匹配匹配)
-
-
)
关闭非捕获组 -
(\w+)
捕获第1组匹配1个以上的文字字符 -
(?:,\s*|;$)
非捕获组,匹配逗号和0+个空格字符,或匹配字符串末尾的;
。