SlideShare a Scribd company logo
BEYOND THE BASICS
                           Regular Expressions in Ruby

                                 @nellshamrell




Thursday, February 7, 13
^4[0-9]{12}(?:[0-9]{3})?$



                           Source: regular-expressions.info

Thursday, February 7, 13
Regular Expressions are Patterns




Thursday, February 7, 13
Test

                       Extract

                       Change


Thursday, February 7, 13
Test

                           Extract

                       Change


Thursday, February 7, 13
Test

                           Extract

                       Change


Thursday, February 7, 13
In Ruby, regular
                           expressions are objects




Thursday, February 7, 13
You program from a regular
                        expression to a result



                               Source: The Well Grounded Rubyist

Thursday, February 7, 13
Oniguruma




Thursday, February 7, 13
Shorthand for Hexadecimals

                              /h and /H




Thursday, February 7, 13
Onigmo




Thursday, February 7, 13
Thursday, February 7, 13
=~

Thursday, February 7, 13
/force/ =~ “Use the force”




Thursday, February 7, 13
“Use the force” =~ /force/




Thursday, February 7, 13
“Use the force” =~ /force/

        => 8




Thursday, February 7, 13
/dark side/ !~ “Use the force”




Thursday, February 7, 13
/dark side/ !~ “Use the force”

        => true




Thursday, February 7, 13
MatchData




Thursday, February 7, 13
.match




Thursday, February 7, 13
string = “The force will be with
                           you always.”




Thursday, February 7, 13
string = “The force will be with
                           you always.”
           m =/force/.match(string)




Thursday, February 7, 13
string = “The force will be with
                           you always.”
           m =/force/.match(string)

            => #<MatchData “force” >



Thursday, February 7, 13
string = “The force will be with
                           you always.”
           m =/force/.match(string,5)




Thursday, February 7, 13
string = “The force will be with
                           you always.”
           m =/force/.match(string,5)

            => nil



Thursday, February 7, 13
What can you do with MatchData?




Thursday, February 7, 13
m.to_s




Thursday, February 7, 13
m.to_s
       => “force”




Thursday, February 7, 13
m.to_s
       => “force”

       m.pre_match




Thursday, February 7, 13
m.to_s
       => “force”

       m.pre_match
       => “The ”




Thursday, February 7, 13
m.to_s
       => “force”

       m.pre_match
       => “The ”

       m.post_match

Thursday, February 7, 13
m.to_s
       => “force”

       m.pre_match
       => “The ”

       m.post_match
       => “ be with you”
Thursday, February 7, 13
Capture Groups




Thursday, February 7, 13
/(.*)force(.*)/




Thursday, February 7, 13
m = /(.*)force(.*)/.match(string)




Thursday, February 7, 13
m = /(.*)force(.*)/.match(string)

           m.captures




Thursday, February 7, 13
m = /(.*)force(.*)/.match(string)

           m.captures

           => [“The ”,

                           “will be with you always”]

Thursday, February 7, 13
You access capture groups with []




Thursday, February 7, 13
m[1]




Thursday, February 7, 13
m[1]
       => “The ”




Thursday, February 7, 13
m[1]
       => “The ”

       m[2]




Thursday, February 7, 13
m[1]
       => “The ”

       m[2]
       => “ will be with you always ”




Thursday, February 7, 13
m[0]




Thursday, February 7, 13
m[0]
       => “The force will be with
          you always.”




Thursday, February 7, 13
Match Objects are not arrays




Thursday, February 7, 13
m.each do |match|
             puts match.upcase
           end




Thursday, February 7, 13
m.each do |match|
             puts match.upcase
           end
           => NoMethodError




Thursday, February 7, 13
m.to_a.each do |match|
             puts match.upcase
           end




Thursday, February 7, 13
m.to_a.each do |match|
             puts match.upcase
           end
           => “THE FORCE WILL BE
              WITH YOU ALWAYS”
                           “THE ”
                           “WILL BE WITH YOU
                           ALWAYS”
Thursday, February 7, 13
Thursday, February 7, 13
LookArounds Define Context




Thursday, February 7, 13
string = “Who’s the more
                      foolish? The fool or
                      the fool who follows
                      him?”




Thursday, February 7, 13
string = “Who’s the more
                      foolish? The fool or
                      the fool who follows
                      him?”

             /fool/



Thursday, February 7, 13
string.scan(/fool/)




Thursday, February 7, 13
string.scan(/fool/)

          => [“fool”, “fool”, “fool”]




Thursday, February 7, 13
Positive Lookahead




Thursday, February 7, 13
?=




Thursday, February 7, 13
string.scan(/fool(?=ish)/)




Thursday, February 7, 13
string.scan(/fool(?=ish)/)

          => [“fool”]




Thursday, February 7, 13
string.gsub(/fool(?=ish)/, “self”)




Thursday, February 7, 13
string.gsub(/fool(?=ish)/, “self”)

          => “Who’s the more
                           selfish? The fool or
                           the fool who follows
                           him?”



Thursday, February 7, 13
Zero Width Positive
                           Lookahead Assertion




Thursday, February 7, 13
Zero width means it does not
                         consume characters




Thursday, February 7, 13
Positive means a match for the
                 lookahead should be present




Thursday, February 7, 13
Lookahead means it is looking
                   ahead of your main match.




Thursday, February 7, 13
Assertion means the lookahead only
    determines whether a match exists




Thursday, February 7, 13
string = “Who’s the more
                      foolish? The fool or
                      the fool who follows
                      him?”




Thursday, February 7, 13
Negative Lookahead




Thursday, February 7, 13
Negative means a match for the
         lookahead should not be present




Thursday, February 7, 13
?!




Thursday, February 7, 13
string.scan(/fool(?!ish)/)




Thursday, February 7, 13
string.scan(/fool(?!ish)/)

          => [“fool”, “fool”]




Thursday, February 7, 13
string.gsub(/fool(?!ish)/, “self”)




Thursday, February 7, 13
string.gsub(/fool(?!ish)/, “self”)

          => “Who’s the more
                           foolish? The self or
                           the self who follows
                           him?”



Thursday, February 7, 13
Positive Lookbehind




Thursday, February 7, 13
string = “For my ally is the
                      force, and a powerful
                      ally it is”




Thursday, February 7, 13
string = “For my ally is the
                      force, and a powerful
                      ally it is”


             /ally/



Thursday, February 7, 13
?<=




Thursday, February 7, 13
/(?<=powerful )ally/




Thursday, February 7, 13
string.gsub(/(?<=powerful )ally/,
        “friend”)




Thursday, February 7, 13
string.gsub(/(?<=powerful )ally/,
        “friend”)
        => “For my ally is the
                           force, and a powerful
                           friend it is”




Thursday, February 7, 13
Negative Lookbehind




Thursday, February 7, 13
?<!




Thursday, February 7, 13
/(?<!powerful )ally/




Thursday, February 7, 13
string.gsub(/(?<!powerful )ally/,
        “friend”)




Thursday, February 7, 13
string.gsub(/(?<!powerful )ally/,
        “friend”)
        => “For my friend is the
                           force, and a powerful
                           ally it is”




Thursday, February 7, 13
Thursday, February 7, 13
Regular Expressions have
                              distinct behaviors




Thursday, February 7, 13
Greedy

                           Lazy

                       Possessive


Thursday, February 7, 13
Greedy

                           Lazy

                       Possessive


Thursday, February 7, 13
Greedy

                           Lazy

                           Possessive


Thursday, February 7, 13
Quantifiers




Thursday, February 7, 13
+


Thursday, February 7, 13
+
                           /.+/

Thursday, February 7, 13
Quantifiers are greedy by default




Thursday, February 7, 13
Greedy Quantifiers match
                             as much as possible




Thursday, February 7, 13
Greedy Quantifiers use maximum
         effort for maximum return




Thursday, February 7, 13
string = “This is no time to
                      talk about time we
                      don’t have the time”




Thursday, February 7, 13
string = “This is no time to
                      talk about time we
                      don’t have the time”


             /.+time/



Thursday, February 7, 13
/.+time/.match(string)




Thursday, February 7, 13
/.+time/.match(string)

          => “This is no time to
                           talk about time we
                           don’t have the time”




Thursday, February 7, 13
Greedy regular expressions
                             try to match the whole
                            string, then backtrack




Thursday, February 7, 13
Oniguruma makes
                           backtracking quicker




Thursday, February 7, 13
Lazy Quantifiers




Thursday, February 7, 13
Lazy Quantifiers match
                            as little as possible




Thursday, February 7, 13
Lazy Quantifiers use minimum
              effort for minimum return




Thursday, February 7, 13
/.+?time/




Thursday, February 7, 13
/.+?time/.match(string)




Thursday, February 7, 13
/.+?time/.match(string)

          => “This is no time”




Thursday, February 7, 13
Lazy regular expressions
                              use less resources




Thursday, February 7, 13
Possessive Quantifiers




Thursday, February 7, 13
Possessive Quantifiers are
                                all or nothing




Thursday, February 7, 13
Possessive Quantifiers try to
                        match the entire string
                       with no backtracking




Thursday, February 7, 13
Possessive Quantifiers use
                             minimum effort for
                              maximum return




Thursday, February 7, 13
/.++time/




Thursday, February 7, 13
/.++time/.match(string)




Thursday, February 7, 13
/.++time/.match(string)

          => nil




Thursday, February 7, 13
Possessive Quantifiers
                                fail faster




Thursday, February 7, 13
Thursday, February 7, 13
Write regular expressions
                               in small chunks




Thursday, February 7, 13
Rubular




Thursday, February 7, 13
Regular expressions come in drafts




Thursday, February 7, 13
Move beyond your fear
                           of regular expressions




Thursday, February 7, 13
Nell Shamrell
             Software Development Engineer
                           Blue Box Group
                           @nellshamrell


Thursday, February 7, 13

More Related Content

More from Nell Shamrell-Harrington

This Week in Rust: 400 Issues and Counting!
This Week in Rust: 400 Issues and Counting!This Week in Rust: 400 Issues and Counting!
This Week in Rust: 400 Issues and Counting!
Nell Shamrell-Harrington
 
The Rust Borrow Checker
The Rust Borrow CheckerThe Rust Borrow Checker
The Rust Borrow Checker
Nell Shamrell-Harrington
 
Higher. Faster. Stronger. Your Applications with Habitat
Higher. Faster. Stronger. Your Applications with HabitatHigher. Faster. Stronger. Your Applications with Habitat
Higher. Faster. Stronger. Your Applications with Habitat
Nell Shamrell-Harrington
 
Habitat Service Discovery
Habitat Service DiscoveryHabitat Service Discovery
Habitat Service Discovery
Nell Shamrell-Harrington
 
Web Operations101
Web Operations101Web Operations101
Web Operations101
Nell Shamrell-Harrington
 
Rust Traits And You: A Deep Dive
Rust Traits And You: A Deep DiveRust Traits And You: A Deep Dive
Rust Traits And You: A Deep Dive
Nell Shamrell-Harrington
 
Rust, Redis, and Protobuf - Oh My!
Rust, Redis, and Protobuf - Oh My!Rust, Redis, and Protobuf - Oh My!
Rust, Redis, and Protobuf - Oh My!
Nell Shamrell-Harrington
 
Containers, Virtual Machines, and Bare Metal, Oh My!
Containers, Virtual Machines, and Bare Metal, Oh My!Containers, Virtual Machines, and Bare Metal, Oh My!
Containers, Virtual Machines, and Bare Metal, Oh My!
Nell Shamrell-Harrington
 
Chef Vault: A Deep Dive
Chef Vault: A Deep DiveChef Vault: A Deep Dive
Chef Vault: A Deep Dive
Nell Shamrell-Harrington
 
Open Source Governance 101
Open Source Governance 101Open Source Governance 101
Open Source Governance 101
Nell Shamrell-Harrington
 
DevOps in Politics
DevOps in PoliticsDevOps in Politics
DevOps in Politics
Nell Shamrell-Harrington
 
Open Source Governance - The Hard Parts
Open Source Governance - The Hard PartsOpen Source Governance - The Hard Parts
Open Source Governance - The Hard Parts
Nell Shamrell-Harrington
 
Creating Packages that Run Anywhere with Chef Habitat
Creating Packages that Run Anywhere with Chef HabitatCreating Packages that Run Anywhere with Chef Habitat
Creating Packages that Run Anywhere with Chef Habitat
Nell Shamrell-Harrington
 
Refactoring terraform
Refactoring terraformRefactoring terraform
Refactoring terraform
Nell Shamrell-Harrington
 
Refactoring Infrastructure Code
Refactoring Infrastructure CodeRefactoring Infrastructure Code
Refactoring Infrastructure Code
Nell Shamrell-Harrington
 
Devops: A History
Devops: A HistoryDevops: A History
Devops: A History
Nell Shamrell-Harrington
 
First Do No Harm: Surgical Refactoring (extended edition)
First Do No Harm: Surgical Refactoring (extended edition)First Do No Harm: Surgical Refactoring (extended edition)
First Do No Harm: Surgical Refactoring (extended edition)
Nell Shamrell-Harrington
 
First Do No Harm: Surgical Refactoring
First Do No Harm: Surgical RefactoringFirst Do No Harm: Surgical Refactoring
First Do No Harm: Surgical Refactoring
Nell Shamrell-Harrington
 
A Supermarket of Your Own: Running a Private Chef Supermarket
A Supermarket of Your Own: Running a Private Chef SupermarketA Supermarket of Your Own: Running a Private Chef Supermarket
A Supermarket of Your Own: Running a Private Chef Supermarket
Nell Shamrell-Harrington
 
Public Supermarket: The Insider's Tour
Public Supermarket: The Insider's TourPublic Supermarket: The Insider's Tour
Public Supermarket: The Insider's Tour
Nell Shamrell-Harrington
 

More from Nell Shamrell-Harrington (20)

This Week in Rust: 400 Issues and Counting!
This Week in Rust: 400 Issues and Counting!This Week in Rust: 400 Issues and Counting!
This Week in Rust: 400 Issues and Counting!
 
The Rust Borrow Checker
The Rust Borrow CheckerThe Rust Borrow Checker
The Rust Borrow Checker
 
Higher. Faster. Stronger. Your Applications with Habitat
Higher. Faster. Stronger. Your Applications with HabitatHigher. Faster. Stronger. Your Applications with Habitat
Higher. Faster. Stronger. Your Applications with Habitat
 
Habitat Service Discovery
Habitat Service DiscoveryHabitat Service Discovery
Habitat Service Discovery
 
Web Operations101
Web Operations101Web Operations101
Web Operations101
 
Rust Traits And You: A Deep Dive
Rust Traits And You: A Deep DiveRust Traits And You: A Deep Dive
Rust Traits And You: A Deep Dive
 
Rust, Redis, and Protobuf - Oh My!
Rust, Redis, and Protobuf - Oh My!Rust, Redis, and Protobuf - Oh My!
Rust, Redis, and Protobuf - Oh My!
 
Containers, Virtual Machines, and Bare Metal, Oh My!
Containers, Virtual Machines, and Bare Metal, Oh My!Containers, Virtual Machines, and Bare Metal, Oh My!
Containers, Virtual Machines, and Bare Metal, Oh My!
 
Chef Vault: A Deep Dive
Chef Vault: A Deep DiveChef Vault: A Deep Dive
Chef Vault: A Deep Dive
 
Open Source Governance 101
Open Source Governance 101Open Source Governance 101
Open Source Governance 101
 
DevOps in Politics
DevOps in PoliticsDevOps in Politics
DevOps in Politics
 
Open Source Governance - The Hard Parts
Open Source Governance - The Hard PartsOpen Source Governance - The Hard Parts
Open Source Governance - The Hard Parts
 
Creating Packages that Run Anywhere with Chef Habitat
Creating Packages that Run Anywhere with Chef HabitatCreating Packages that Run Anywhere with Chef Habitat
Creating Packages that Run Anywhere with Chef Habitat
 
Refactoring terraform
Refactoring terraformRefactoring terraform
Refactoring terraform
 
Refactoring Infrastructure Code
Refactoring Infrastructure CodeRefactoring Infrastructure Code
Refactoring Infrastructure Code
 
Devops: A History
Devops: A HistoryDevops: A History
Devops: A History
 
First Do No Harm: Surgical Refactoring (extended edition)
First Do No Harm: Surgical Refactoring (extended edition)First Do No Harm: Surgical Refactoring (extended edition)
First Do No Harm: Surgical Refactoring (extended edition)
 
First Do No Harm: Surgical Refactoring
First Do No Harm: Surgical RefactoringFirst Do No Harm: Surgical Refactoring
First Do No Harm: Surgical Refactoring
 
A Supermarket of Your Own: Running a Private Chef Supermarket
A Supermarket of Your Own: Running a Private Chef SupermarketA Supermarket of Your Own: Running a Private Chef Supermarket
A Supermarket of Your Own: Running a Private Chef Supermarket
 
Public Supermarket: The Insider's Tour
Public Supermarket: The Insider's TourPublic Supermarket: The Insider's Tour
Public Supermarket: The Insider's Tour
 

Recently uploaded

Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
Aftab Hussain
 
Introducing Milvus Lite: Easy-to-Install, Easy-to-Use vector database for you...
Introducing Milvus Lite: Easy-to-Install, Easy-to-Use vector database for you...Introducing Milvus Lite: Easy-to-Install, Easy-to-Use vector database for you...
Introducing Milvus Lite: Easy-to-Install, Easy-to-Use vector database for you...
Zilliz
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
Matthew Sinclair
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
Adtran
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
shyamraj55
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
名前 です男
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
DianaGray10
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Aggregage
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
Kari Kakkonen
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
Octavian Nadolu
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems S.M.S.A.
 
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AIEnchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Vladimir Iglovikov, Ph.D.
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
Neo4j
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
Zilliz
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
Neo4j
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
KAMESHS29
 
Data structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdfData structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdf
TIPNGVN2
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
innovationoecd
 

Recently uploaded (20)

Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
 
Introducing Milvus Lite: Easy-to-Install, Easy-to-Use vector database for you...
Introducing Milvus Lite: Easy-to-Install, Easy-to-Use vector database for you...Introducing Milvus Lite: Easy-to-Install, Easy-to-Use vector database for you...
Introducing Milvus Lite: Easy-to-Install, Easy-to-Use vector database for you...
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
 
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AIEnchancing adoption of Open Source Libraries. A case study on Albumentations.AI
Enchancing adoption of Open Source Libraries. A case study on Albumentations.AI
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
 
Data structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdfData structures and Algorithms in Python.pdf
Data structures and Algorithms in Python.pdf
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
 

Beyond the Basics: Regular Expressions in Ruby