首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有2层的文章旋转器

具有2层的文章旋转器
EN

Stack Overflow用户
提问于 2012-03-01 22:19:57
回答 3查看 580关注 0票数 0

我做了一篇文章微调,它使用正则表达式查找以下语法中的单词:

代码语言:javascript
复制
{word1|word2}

然后在"|“处将它们分开,但我需要一种方法来使其支持第二层括号,例如:

代码语言:javascript
复制
{{word1|word2}|{word3|word4}}

当我的代码出现这样的一行时,所做的是获取"{{word1|word2}“和"{word3|word4}",但这并不是预期的结果。

我想要的是,当出现这样的一行时,我的代码将它分解为"{word1|word2}|{word3|word4}",这样我就可以将其与原始函数一起使用,并将其分解为实际的单词。

我正在使用c#。

下面是它的伪代码:

代码语言:javascript
复制
Check string for regex match to "{{word1|word2}|{word3|word4}}" pattern
If found, store each one as "{word1|word2}|{word3|word4}" in MatchCollection (mc1)
Split the word at the "|" but not the one inside the brackets, and select a random one (aka, "{word1|word2}" or "{word3|word4}")
Store the new results aka "{word1|word2}" and "{word3|word4}" in a new MatchCollection (mc2)
Now search the string again, this time looking for "{word1|word2}" only and ignore the double "{{" "}}"
Store these in mc2.
I can not split these up normally

下面是我用来搜索“{word1|word2}”的正则表达式:

代码语言:javascript
复制
Regex regexObj = new Regex(@"\{.*?\}", RegexOptions.Singleline);
MatchCollection m = regexObj.Matches(originalText); //How I store them

希望有人能帮上忙,谢谢!

编辑:我使用递归方法解决了这个问题。我正在建立一个文章旋转顺便说一句。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-01 23:19:56

这不能使用正则表达式进行解析,而必须使用递归下降解析器。通过替换将其映射到JSON:

,

  • wordX的带[

  • |
  1. {"wordX" (regex \w+)

然后你的输入

代码语言:javascript
复制
{{word1|word2}|{word3|word4}}

成为有效的JSON

代码语言:javascript
复制
[["word1","word2"],["word3","word4"]]

并在调用json_decode时直接映射到PHP数组。

在C#中,JavaScriptSerializer也应该可以做到这一点。

票数 2
EN

Stack Overflow用户

发布于 2012-03-01 23:25:56

我真的不太确定你想要什么,但我会试一试:

如果您希望从任何出现的{{word1|word2}|{word3|word4}}中提取{word1|word2}|{word3|word4},而不是从{word1|word2}{word3|word4}中提取,则使用以下命令:

代码语言:javascript
复制
@"\{(\{[^}]*\}\|\{[^}]*\})\}"

...which将与{{word1|word2}|{word3|word4}}匹配,但{word1|word2}|{word3|word4}在第一个匹配组中。

我不确定这是否会有帮助,或者它是否沿着正确的轨道,但我会尝试每隔一段时间检查更多的问题或澄清。

票数 1
EN

Stack Overflow用户

发布于 2016-06-13 01:44:28

S=“{spinning|Rewriting|Rotating| Content |Rewriting|SEO Content Machine} is {fun|enjoyable|entertaining|exciting|enjoyment}!{自己|自己尝试一下},{看看|观察它是如何|运行|运行|执行|是有效的}。”打印旋转

如果您想使用方括号|语法,请在process函数中使用下面这一行:

‘/[(?>[^[]]+)|(?r))*)]/x’,

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9517795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档