regext匹配所有出现但停止在字符串

时间:2018-03-01 02:37:39

标签: regex

我对正则表达式感到头痛....再次......

拥有text:// Edit1:我必须更改文本,因为我没有从每行的值开始

lorem ipsum 1 $input_value sample
lorem ispum 2 "$input_notvalue"
lorem ipsum 3 helloworld $input_theme samplemeh
<script>$input_value</script>

我希望匹配任何“$ input”的出现并返回“$ input”出现的整个单词,但想要在“script”和“/ script”中排除结果。

我的成就:\$input\w* // EDIT1:更新:

https://regex101.com/r/BM87xA/4/

也可以停止搜索第一次出现的单词脚本......

我感谢任何帮助......

干杯, S上。

3 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望找到所有$ input_xxx,<script> - 标记中包含的内容除外。

我相信,最接近的解决方案如下:

/^(?!<script>).*?(\$input_\w+).*?(?!<\/script>).*?/sgim

https://regex101.com/r/BM87xA/14/

在我看来,不可能创建一个正面匹配的正则表达式,包括&#34;自我搜索&#34;负面比赛。在脚本标记之前和之后,您需要一个标记字符(如换行符,行尾或其他很少使用)。以下表达式解决了搜索问题,而不是使用粘性标记字符串。

/(?!<script>).*?(\$input_\w+).*?(?!<\/script>)/sgimy

https://regex101.com/r/BM87xA/14/

我添加了一些其他测试用例来展示它在不同情况下的表现。

如果您可以自由选择要搜索的模式,则选择更独特的模式会更容易。如果你想确保脚本中的代码不会被破坏,你可以轻松地选择&#34;禁止&#34;或评论标志等不加批判的东西。例如。你的匹配模式看起来像

/*input_sometext*/ 

并在你的正则表达式中搜索

/\/\*input_\w+\*\/

希望这有帮助。

答案 1 :(得分:0)

如果您希望匹配以$ input开头的行,请使用 ^

^\$input\w+

你也可以使用负向前看断言来匹配以$ input开头而不是脚本的行

^(?!<script>)\$input\w+

答案 2 :(得分:0)

如果您正在使用python,这可能就是您所需要的:

text = """
$input_value
$input_notvalue
$input_theme
<script>$input_value</script>
 """

pattern = '\$input\w+'
result = re.findall(pattern, text)
print result

result是存在$ input的元素列表:

['$input_value', '$input_notvalue', '$input_theme', '$input_value']