正则表达式:在字符串中的两个标签之间拉出一个子字符串

我有以下格式的文件:

Data Data
Data
[Start]
Data I want
[End]
Data

我想用正则表达式从 [Start][End] 标签之间抓取 Data I /任何人都可以告诉我如何做到这一点?

0
额外 编辑
意见: 1
类似于“RegEx在标签中获取文本” - stackoverflow.com/questions/353309/…
额外 作者 Robinicks,

13 答案

$ {\ rm S} _6 $不是有限群的自同构群。 见H.K. Iyer,在求解方程Aut(X)= G 时,Rocky Mountain J. Math。 9(1979),no。 4,653--670,在线提供 此处

本文证明,对于任何有限群$ G $,都有很多 有限群$ X $与$ {\ rm Aut}(X)= G $,它明确地解决了这个问题 方程对于某些特定的$ G $值。 特别是,定理4.4给出了$ G $的完整解 一个对称组,当$ n = 6 $时,不存在这样的$ X $。

80
额外

这可能值得指出

Belolipetsky,米哈伊尔; Lubotzky,   亚历山大。有限群体和   双曲流形。发明。数学。   162(2005),no。 3,459-472。 MR2198218

其中显示了对于每个有限群 G ,都有一个无限群Gamma,其中Out(Gamma)= G

30
额外
有一个更强的结果这里 sciencedirect.com/… ;对于可数组。
额外 作者 Qiaochu Yuan,

另一方面,$ {\ rm S} _6 $同构于$ {\ rm Sp} _4(\ mathbb {F} _2)$, 所以它是另一个类别中的自同构群组(群组除外) 或集合)。这个自同构性是通过看2的扭转来展现的 属于2的超椭圆曲线H的雅可比矩阵(如果$ H $由下式给出) $ y ^ 2 = f(x)$,其中$ f $为6次,那么15个非平凡的两个扭转点是 给定[作为伽罗瓦模块]由$ f $的根的差异;请参阅wiki页面 对于)。

15
额外
你的意思是Sp_4(F_2),我相信 - SL_4(F_2)太大而不能成为S_6。
额外 作者 Vladimir Dotsenko,

There is a whole array of results, going back to G. Birkhoff at 1930s saying that every group is an automorphism group of some universal algebra (or some universal algebra inside some class).
(This really should be merely a comment to the previous answer, but I am still not reputable enough to leave comments).

6
额外
同时你有足够的评论点!
额外 作者 Stefan Kohl,

使用Perl,您可以用()将周围的数据包围起来,稍后将其拉出,其他语言也可能具有类似的功能。

if ($s_output =~ /(data data data data START(data data data)END (data data)/) 
{
    $dataAllOfIt = $1;      # 1 full string
    $dataInMiddle = $2;     # 2 Middle Data
    $dataAtEnd = $3;        # 3 End Data
}
0
额外
\[start\]\s*(((?!\[start\]|\[end\]).)+)\s*\[end\]

这应该有希望放弃 [start][end] 标记。

0
额外
展望未来可能效率较低,但我喜欢如果您有意外的 [开始][end] 阻止它被打破。考虑边缘情况并抢先它们总是很好的。
额外 作者 Alex W,
\[start\](.*?)\[end\]

Zhich'll将文字置于中间。

0
额外
比接受的答案好得多(更简单)... :-)
额外 作者 PhiLho,
这仍然不会捕捉具有换行符的字符串
额外 作者 Doug,
@Doug使用选项dotall。不是正则表达式的问题。
额外 作者 AlexR,

那么,如果你保证每个开始标签后面跟着一个结束标签,那么以下内容就可以工作。

\[start\](.*?)\[end\]

但是,如果您有复杂的文本,如下面的内容:

[start] sometext [start] sometext2 [end] sometext [end]

那么你会遇到与正则表达式的问题。

现在,下面的例子将拉出页面中的所有热链接:

'//i'

在上述情况下,我们可以保证不会有嵌套的情况:

''

所以,这是一个复杂的问题,不能用简单的答案来解决。

0
额外

有关使用正则表达式找到匹配标记的陷阱的更完整讨论可以在以下网址找到: http: //faq.perl.org/perlfaq4.html#How_do_I_find_matchi 。特别要注意的是,嵌套标记确实需要一个完整的解析器才能正确解释。

请注意,为了回答上述问题,需要关闭区分大小写。在Perl中,这是 i 修饰符:

$ echo "Data Data Data [Start] Data i want [End] Data" \
  | perl -ne '/\[start\](.*?)\[end\]/i; print "$1\n"'
 Data i want 

另一个技巧是使用关闭捕获匹配贪婪的 *?量词。例如,如果您有一个不匹配的 [结束] 标记:

Data Data [Start] Data i want [End] Data [end]

你可能不想捕捉:

 Data i want [End] Data
0
额外

虽然您可以使用正则表达式来解析开始标签和结束标签之间的数据,但您需要长时间思考并确定这是否是您想要关闭的路径。其原因是标签嵌套的潜力:如果嵌套标签可能发生或可能发生,则说该语言不再是规则的,并且正则表达式不再是解析它的适当工具。

许多正则表达式实现(如PCRE或perl的正则表达式)支持可用于实现这种粗糙效果的回溯。但PCRE(不像perl)不支持无限制的回溯,并且只要你有太多的标签,这实际上会导致事情以怪异的方式破坏。

有一个非常常见的博客文章,讨论这更多, http://kore-nordmann.de/博客/ do_NOT_parse_using_regexp.html (谷歌它和目前检查缓存,他们似乎有一些宕机)

0
额外
$text ="Data Data Data start Data i want end Data";
($content) = $text =~ m/ start (.*) end /;
print $content;

I had a similar problem for a while & I can tell you this method works...

0
额外

参考这个问题,在带有空格字符和点的标签之间拉出文本(

[\S\s] is the one I used

正则表达式匹配任何包含新行的字符

0
额外

Reading the text with in the square brackets [] i.e.[Start] and [End] and validate the array with a list of values. jsfiddle http://jsfiddle.net/muralinarisetty/r4s4wxj4/1/

var mergeFields = ["[sitename]",
                   "[daystoholdquote]",
                   "[expires]",
                   "[firstname]",
                   "[lastname]",
                   "[sitephonenumber]",
                   "[hoh_firstname]",
                   "[hoh_lastname]"];       

var str = "fee [sitename] [firstname] \
sdfasd [lastname] ";
var res = validateMeargeFileds(str);
console.log(res);

function validateMeargeFileds(input) {
    var re = /\[\w+]/ig;
    var isValid;
    var myArray = input.match(re);

    try{
        if (myArray.length > 0) {
            myArray.forEach(function (field) {

                isValid = isMergeField(field);

                if (!isValid){
                   throw e;                        
                }
            });
        }
    }
    catch(e) {        
    }

    return isValid;
}

function isMergeField(mergefield) {
    return mergeFields.indexOf(mergefield.toLowerCase()) > -1;
}
0
额外