Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby,regex,句子_Ruby_Regex - Fatal编程技术网

Ruby,regex,句子

Ruby,regex,句子,ruby,regex,Ruby,Regex,我目前正在构建一个代码生成器,其目的是在我编写模板和/或翻译后,用我必须使用的任何语言为我生成boiler plate 我对Ruby中的正则表达式有问题。正则表达式的目的是选择{{{{}和}}}之间的任何值,这样我就可以根据需要生成函数 我的正则表达式当前为: /\{\{\{(([a-zA-Z]|\s)+)\}\}\}/m 我的测试数据集是: {{{Demande aaa}}} => {{{tagadatsouintsouin tutu}}} 结果是: [["Demande

我目前正在构建一个代码生成器,其目的是在我编写模板和/或翻译后,用我必须使用的任何语言为我生成boiler plate

我对Ruby中的正则表达式有问题。正则表达式的目的是选择{{{{}和}}}之间的任何值,这样我就可以根据需要生成函数

我的正则表达式当前为:

/\{\{\{(([a-zA-Z]|\s)+)\}\}\}/m
我的测试数据集是:

{{{Demande    aaa}}} => {{{tagadatsouintsouin    tutu}}}
结果是:

[["Demande aaa", "a"], ["tagadatsouintsouin tutu", "u"]]
每次正则表达式选取最后一个字符两次。这不完全是我想要的,我需要更像这样的东西:

/\{\{\{((\w|\W)+)\}\}\}/m
但这也有一个缺陷,结果是:

[["Demande aaa}}} => {{{tagadatsouintsouin tutu", "u"]]
鉴于,我希望获得:

[["Demande aaa"],["tagadatsouintsouin tutu"]]
如何更正这些正则表达式?我可以使用两组分隔符,但它不会教我任何东西

编辑:

你所有的正则表达式都与我的数据样本相匹配,所以你们都得到了一分

Regex可能有些过火,而且对我来说也可能有些过火。所以我有两个问题

首先,正则表达式是否保持相同的精确缩进?这应该能够处理整个功能

第二,是否有更适合这项任务的东西

详细说明此工具的用途。我厌倦了用php-symfony编写锅炉板代码。所以我希望根据模板生成这个

我的意图是以这种方式构建一些视图、一些控制器,甚至部分模型

实际示例:在我的模型中,我希望根据对象属性的类型生成一些函数。例如,我有正确显示货币的函数。因此,我需要根据我的属性构建corect函数,然后将其放入m输出文件中

所以有些翻译本身就需要翻译

这是一个虚构的例子:

{{{euro}}} => {{{ function getMyAttributeEuro()
 {
   return formating($this->get[[MyAttribute]]);
 } }}}
为了储存我的翻译,我应该使用正则表达式吗 我希望构建一个稍微聪明一点的东西,这样它就可以构建大多数基本代码而没有bug。所以我可以编写有趣的代码

只要一枪

/\{\{\{([\w\W]+?)\}\}\}/
在正则表达式中添加了非贪婪性


这似乎有效

一组括号太多了

/\{\{\{([a-zA-Z\s]+)\}\}\}/

此外,您不需要/m修改器,因为没有点。在您的正则表达式中,谁的行为会受到它的影响。

您想要非捕获组?:…,但这里有另一种方法

/\{\{\{(.*?)\}\}\}/m
我偏爱:

data = '{{{Demande    aaa}}} => {{{tagadatsouintsouin    tutu}}}'
data.scan(/\{{3}(.+?)}{3}/).flatten.map{ |r| r.squeeze(' ') }
=> ["Demande aaa", "tagadatsouintsouin tutu"]
或:

或:

如果您需要子阵列

我不喜欢在正则表达式中尝试所有可能的东西。我更喜欢保持简短,然后在找到我想要的东西后再润色输出。这是一个维护问题,因为regex让我头疼,几年前我就不再认为它们是有男子气概的东西了。正则表达式是一个非常有用的工具,但它们常常被视为每个问题的答案,而事实并非如此

有些人在遇到问题时会想:“我知道, 现在他们有两个问题

-

您真的希望匹配{{{{{和}}}之间的任何内容吗?
data.scan(/\{{3}(.+?)}{3}/).flatten.map{ |r| [ r.squeeze(' ') ] }
=> [["Demande aaa"], ["tagadatsouintsouin tutu"]]
data.scan(/\{{3}(.+?)}{3}/).map{ |r| [ r[0].squeeze(' ') ] }
=> [["Demande aaa"], ["tagadatsouintsouin tutu"]]