例如,如果我有类似的东西:
public function store(Request $request) {
$request = $request->all();
$new = App\Model::create($request);
$new->save();
if ( Request comming from url or route x ) {
return redirect()->back();
} else {
return redirect()->route('route');
}
我想删除让我们说的墙并保留其他行,我该如何使用regex进行操作,还是有比regex更好的选择?
所以我需要它看起来像:
<Mansions \>
windows
walls
floors
<\Mansions>
,在我移除墙壁后,上方的线条仍将存在。因此,目标是在文件中搜索这些行组,并删除一个单词,而仍然保留其他单词在该行中以及该组中。
请记住,我只是在更改文件中的该组,而不是更改文件中单词的实例,因为那样会更简单。
我尝试使用正则表达式:
<Mansions \>
windows
floors
<\Mansions>
但是当我删除单个单词(如walls)时,这不起作用
那么是否可以将正则表达式用于类似这样的事情?
答案 0 :(得分:1)
这是一个Perl单行代码,它使用触发器运算符( public static List<Order> AllOrders(string customerId)
{
var orderlist = new List<Order>();
if (Order!=null && Order.Count>0)
{
if (Order.TryGetValue(customerId, out orderlist))
return orderlist;
}
return FromDB(customerId);
}
)仅对两个正则表达式匹配中的文本进行操作。如果它与..
匹配并且在开始和结束文本之内,则会跳过该行。
/wall/
答案 1 :(得分:1)
$ awk '/<\\Mansions>/{f=0} f && /walls/{next} /<Mansions \\>/{f=1} 1' file
<Mansions \>
windows
floors
<\Mansions>
以上内容可在任何UNIX盒中的任何shell中使用任何awk进行工作。
答案 2 :(得分:0)
在Perl中,您可以尝试以下操作:
use feature qw(say);
use strict;
use warnings;
my $str = '
<Mansions \>
walls
windows
floors
<\Mansions>';
my $word = 'walls';
$str =~ s/^(\s*<Mansions\s*\\>)(.*?)(<\\Mansions>)/do_replace($1, $2, $3, $word)/mseg;
say $str;
sub do_replace {
my ( $header, $group, $closer, $word ) = @_;
$header. ($group =~ s/\n?^\s*\Q$word\E\s*$//mr) . $closer;
}
输出:
<Mansions \>
windows
floors
<\Mansions>
答案 3 :(得分:0)
如果这些组没有相互分组,则可以使用sed脚本:
脚本.sed
/<Mansions \\>/,/<\\Mansions>/ {
/^[[:blank:]]*walls[[:blank:]]*$/ d
}
您可以像sed -Ef script.sed yourfile
一样运行它。
说明
/<Mansions \\>/,/<\\Mansions>/ { ... }
注意内部表达式仅应用于<Mansions \>
和<\Mansions>
之间的行。如果将Mansion组合在其他Mansion中,则此方法将无效。/^[[:blank:]]*walls[[:blank:]]*$/ ...
选择包含单词walls
并带有可选的前导和尾随空格的行。d
意味着删除这些行。答案 4 :(得分:0)
为什么要加倍努力?如前所述,您的问题不需要任何代码或正则表达式,也不需要纯粹的香草查找和替换功能。如果您的问题中还有其他地方需要代码答案,那么我找不到它。
在Find
中使用此:
<Mansions \>
windows
walls
floors
<\Mansions>
在Replace
中使用此:
<Mansions \>
windows
floors
<\Mansions>
单击Replace All
。
任务完成。