我想为以下内容提出一个正则表达式:
<action>::=Action(<entity><entity><Asset>)
我想要有令牌,如:
Action(
<entity>
<entity>
<Asset>
)
实体和资产有&lt;&gt;在它们周围,Action后跟“(”。但是,“)”是一个独立的标记。 我使用以下内容:
([a-zA-Z]+\\()|((<.*?>)|([a-zA-Z]*))|(\\))?
但它无法将")"
显示为令牌?我做错了什么?
答案 0 :(得分:1)
试试这个正则表达式:
([a-zA-Z]*\\()|(<[a-zA-Z]*>)|(\\))
答案 1 :(得分:0)
答案 2 :(得分:0)
你的正则表达式实际上有些错误,或者至少它使得表达式以一种意想不到的方式运行(对我来说)。
表达式可以这样分解:
([a-zA-Z]+\\()| (?# matches alphabetical characters and an opening round-bracket)
((<.*?>)| (?# non-greedily matches anything between brackets)
([a-zA-Z]*))| (?# 3rd pattern: may match an empty string)
(\\))? (?# 4th pattern: optionally matches a closing round bracket)
由于|
运算符从不贪婪,因此在您实际需要的第4个模式之前触发第三个模式(匹配空字符串)。
证明这是你用正则表达式实际获得的标记是:
''
''
''
'Action('
'<entity>'
'<entity>'
'<Asset>'
''
''
因此你想要的可能是这样的:
([a-zA-Z]+\\()| (?# matches alphabetical characters and an opening round-bracket)
(<.*?>)| (?# non-greedily matches anything between brackets)
(\\)) (?# matches a closing round bracket)
请注意我从第4个模式中移除了?
运算符,该模式奇怪地放在括号之外,并且还捕获了空字符串。