我有以下文本保存在文件中并尝试执行正则表达式
JobsController
当我尝试运行以下perl命令时,
class JobsController < ApplicationController
before_action :set_job, only: [:edit, :update]
def index
@user = User.find(params[:user_id])
@jobs = Job.all
# @jobs = current_user.jobs.all
end
def show
@user = User.find(params[:user_id])
@job = Job.find(params[:id])
@job_json = @job.to_json(only: [:location, :title, :id])
end
def new
@jobs = Job.new
end
def create
@user = User.find(params[:user_id])
@job = current_user.jobs.build(job_params)
@job.user = current_user
respond_to do |format|
if @job.save
format.html { redirect_to @job, success: 'Job wiki was created!' }
format.json { render json: @job, status: :created, location: @job }
format.js
else
format.html { render action: 'new' }
format.json { render json: @job.errors, status: :unprocessable_entity }
format.js
end
end
end
...
打印所有三行(而不是打印line2和line3) 这个匹配的第一行怎么样?如果我使用以下perl语句
,我会得到预期的结果line1 brown fox
line2 black owl
line3 red dear
由于
答案 0 :(得分:3)
所有三个字符串都成功匹配,因为前瞻之前的.*
贪婪地匹配每个字符并吞噬整个字符串。然后引擎将提前尝试断言字符串中的后续内容不是&#34; foo&#34 ;;回溯到前瞻内部的.*
并贪婪地重复,直到它在字符串位置的末尾断言。
将前瞻放在字符串的开头,以断言当前位置和后面的内容不是&#34; fox&#34;。如果前瞻成功,引擎将继续匹配。
perl -ne 'print if /^(?!.*fox).*/' text.txt
上面将展望是否没有任何角色(除了换行符)或&#34; fox&#34;。如果成功,则匹配任何字符(除了换行符),换句话说,匹配整个字符串。