我做了一篇文章微调,它使用正则表达式查找以下语法中的单词:
{word1|word2}然后在"|“处将它们分开,但我需要一种方法来使其支持第二层括号,例如:
{{word1|word2}|{word3|word4}}当我的代码出现这样的一行时,所做的是获取"{{word1|word2}“和"{word3|word4}",但这并不是预期的结果。
我想要的是,当出现这样的一行时,我的代码将它分解为"{word1|word2}|{word3|word4}",这样我就可以将其与原始函数一起使用,并将其分解为实际的单词。
我正在使用c#。
下面是它的伪代码:
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}”的正则表达式:
Regex regexObj = new Regex(@"\{.*?\}", RegexOptions.Singleline);
MatchCollection m = regexObj.Matches(originalText); //How I store them希望有人能帮上忙,谢谢!
编辑:我使用递归方法解决了这个问题。我正在建立一个文章旋转顺便说一句。
发布于 2012-03-01 23:19:56
这不能使用正则表达式进行解析,而必须使用递归下降解析器。通过替换将其映射到JSON:
带,
wordX的带[
|的{带"wordX" (regex \w+)然后你的输入
{{word1|word2}|{word3|word4}}成为有效的JSON
[["word1","word2"],["word3","word4"]]并在调用json_decode时直接映射到PHP数组。
在C#中,JavaScriptSerializer也应该可以做到这一点。
发布于 2012-03-01 23:25:56
我真的不太确定你想要什么,但我会试一试:
如果您希望从任何出现的{{word1|word2}|{word3|word4}}中提取{word1|word2}|{word3|word4},而不是从{word1|word2}或{word3|word4}中提取,则使用以下命令:
@"\{(\{[^}]*\}\|\{[^}]*\})\}"...which将与{{word1|word2}|{word3|word4}}匹配,但{word1|word2}|{word3|word4}在第一个匹配组中。
我不确定这是否会有帮助,或者它是否沿着正确的轨道,但我会尝试每隔一段时间检查更多的问题或澄清。
发布于 2016-06-13 01:44:28
S=“{spinning|Rewriting|Rotating| Content |Rewriting|SEO Content Machine} is {fun|enjoyable|entertaining|exciting|enjoyment}!{自己|自己尝试一下},{看看|观察它是如何|运行|运行|执行|是有效的}。”打印旋转
如果您想使用方括号|语法,请在process函数中使用下面这一行:
‘/[(?>[^[]]+)|(?r))*)]/x’,
https://stackoverflow.com/questions/9517795
复制相似问题