2016-11-14 155 views
0

我需要將以下EBNF轉換爲與任何有效格式字符串匹配的正則表達式。例如, '< 8', '*^10', '+ 6', '15,0.2' 等將EBNF轉換爲正則表達式

<spec> -> :[[<fill>]<align>][<sign>][<width>][,][.<prec>] 
<fill> -> <character> (* i.e., any one character) 
<align> -> < | > | = |^
<sign> -> + | - | ' ' 
<width> -> <integer> (* i.e, one or more digits 0....9 *) 
<prec> -> <integer> 
+0

向我們展示你嘗試過什麼 – nozzleman

回答

0

如果正則表達式引擎支持命名捕獲組(FE PCRE),那麼這可以工作:

^((?<fill>.?)(?<align>[<>=^]))?(?<sign>[ +\-]?)(?<width>[0-9]+)[,]?(?:[.](?<prec>[0-9]+))?$ 

測試here

注意,大多數是可選的,除了 「寬度」 捕獲組。這是基於所有示例中都存在「寬度」的假設。

使用未命名捕獲組,正則表達式變短:

^((.?)([<>=^]))?([ +\-]?)([0-9]+)[,]?(?:[.]([0-9]+))?$ 
相關問題