正则表达式匹配基于唯一字符串

时间:2018-05-18 02:06:53

标签: regex

我已经在这一段时间待了一段时间并且无法解决这个问题。

我正在尝试根据独特的模式匹配重复模式的立即左侧出现。

说我有以下字符串

  

DataColumn Caption =“ColA”DataField =“Col1Data”DataColumn Caption =“ColB”DataField =“Col2Data”DataColumn Caption =“ColC”DataField =“Col3Data”DataColumn Caption =“ColD”DataField =“Col4Data”DataColumn Caption = “ColE”DataField =“Col5Data”DataColumn Caption =“ColF”DataField =“Col6Data”DataColumn Caption =“ColG”DataField =“Col7Data”DataColumn Caption =“ColH”DataField =“Col8Data”DataColumn Caption =“ColI”DataField =“ Col9Data“

我想在<{1}}之前匹配(进行查找/替换)Caption的值,以便我可以更改它的值Col“to other else。

我最接近的是将贪婪的非捕获组放在模式前面,如DataField="Col8Data"

然而,这给了我一个匹配的第一个(?:.*)Caption="(.*)"\sDataField="Col8Data"与我在搜索组中找到的col之间的整个字符串(不是我追求的)

非常感谢帮助

修改

我忘了提及Caption="Col"的价值总是不同,因此我试图将其与Caption匹配。 我已经更新了字符串示例以显示

1 个答案:

答案 0 :(得分:1)

您可以尝试使用外观进行查找/替换。尝试找到以下模式:

 public function image_item_name($inc) 
{
    if(isset($_POST['inc'])) {
        $inc = $_POST['inc'];
        $i = DB::select("SELECT file_name FROM tbl_image_item_name WHERE inc = '$inc';");

        foreach ($i as $a){ 

          echo '<img src="../../{{ $a[0]->file_name }}">';

        }
    }else {
        echo "Access Denied";
    }

您可以自行确认这与您想要的(?<=Caption=)"[^"]+"(?=\s*DataField="Col8Data") "Col"字词之间的Caption值相匹配。然后,用你想要的任何值替换。

Demo