我对正则表达式感到头痛....再次......
拥有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上。
答案 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']