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