我制作了一篇文章微调器,使用正则表达式来查找此语法中的单词:
{word1|word2}
然后将它们拆分为“|”,但我需要一种方法来支持第2层括号,例如:
{{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
希望有人可以提供帮助,谢谢!
编辑:我使用递归方法解决了这个问题。我正在制作一篇文章微调器btw。
答案 0 :(得分:2)
使用正则表达式无法解析,而是必须使用递归下降解析器。通过替换:
将其映射到JSON{
与[
|
与,
wordX
与"wordX"
(正则表达式\ w +)然后输入
{{word1|word2}|{word3|word4}}
变为有效的JSON
[["word1","word2"],["word3","word4"]]
并在调用json_decode
时直接映射到PHP数组。
在C#中,JavaScriptSerializer
也应该可以这样做。
答案 1 :(得分:1)
我真的不完全确定你要求的是什么,但我会试一试:
如果您希望{word1|word2}|{word3|word4}
出现{{word1|word2}|{word3|word4}}
而不是{word1|word2}
或{word3|word4}
,请使用以下内容:
@"\{(\{[^}]*\}\|\{[^}]*\})\}"
... 匹配 {{word1|word2}|{word3|word4}}
,但第一个匹配组中有{word1|word2}|{word3|word4}
。
我不确定这是否有用,或者即使它是在正确的轨道上,但我会尝试每隔一段时间检查一次,以获得更多问题或澄清。
答案 2 :(得分:-1)
s =" {旋转|重写|旋转|内容旋转|重写| SEO内容机器}是{有趣|愉快|娱乐|兴奋|享受}!试试{为你自己|你自己|你自己|为你}和{看看如何|观察如何|观察}它{工作|功能|操作|执行|有效}。" print spin(s)
如果要使用[square | bracket |语法],请在过程函数中使用以下行:
' /; | / X&#39 [(((大于[^ []] +)(R))*?)];,