function Get-BibleReferences
{
<#
.SYNOPSIS
Finds
scripture references within the provided text.
.DESCRIPTION
Uses regular
expressions to find references to the Bible and returns them as a set.
.PARAMETER Text
The text to
parse for scripture references.
.EXAMPLE
PS C:\>
Get-BibleReferences "Titus 3:1
Really any text can be here -- 1 Timothy 2:1-2 -" | Format-Table
-AutoSize
Reference Book Chapter Verses From To
--------- ----
------- ------ ---- --
Titus
3:1 Titus 3
1 1
1 Timothy
2:1-2 1 Timothy 2 1-2 1
2
.NOTES
Dag Calafell
01.20.2018
.LINK
https://dynamicsax365trix.blogspot.com/
#>
[CmdletBinding(DefaultParameterSetName="Default")]
param(
[Parameter(ParameterSetName="Default",
ValueFromPipelineByPropertyName=$true,
Mandatory=$true,
Position=0)]
[ValidateNotNullOrEmpty()]
[string[]]$text
)
$regex
= new-object
System.Text.RegularExpressions.Regex("(?(?:(?:[123]|I{1,3})\s*)?(?:[A-Z][a-zA-Z]+|Song
of Songs|Song of
Solomon)).?\s*(?1?[0-9]?[0-9]):\s*(?\d{1,3})(?:[,-]\s*(?\d{1,3}))*" , [System.Text.RegularExpressions.RegexOptions]::MultiLine)
$regexMatches
= $regex.Matches($text)
foreach ($match
in $regexMatches)
{
$groups
= $match.Groups
$book = $groups[1].Value
$chapter = $groups[2].Value
$fromVerseNum
= $groups[3].Value
$toVerseNum = $groups[4].Value
$object
= New-Object
–TypeName PSObject
$object
| Add-Member
–MemberType NoteProperty
–Name Reference
–Value $groups[0].Value
$object
| Add-Member
–MemberType NoteProperty
–Name Book
–Value $book
$object
| Add-Member
–MemberType NoteProperty
–Name Chapter
–Value $chapter
if
($groups[4].Success)
{
$object
| Add-Member
–MemberType NoteProperty
–Name Verses
–Value ("{0}-{1}"
-f $fromVerseNum, $toVerseNum)
$object
| Add-Member
–MemberType NoteProperty
–Name From
–Value $fromVerseNum
$object
| Add-Member
–MemberType NoteProperty
–Name To –Value $toVerseNum
}
else
{
$object
| Add-Member
–MemberType NoteProperty
–Name Verses
–Value $fromVerseNum
$object
| Add-Member
–MemberType NoteProperty
–Name From
–Value $fromVerseNum
$object
| Add-Member
–MemberType NoteProperty
–Name To –Value ""
}
# Return
the info
$object
}
}
# Example
Get-BibleReferences "Titus 3:1
Really any text can be here -- 1 Timothy 2:1-2 -" | Format-Table -AutoSize
Output
Reference Book Chapter Verses From To
--------- ---- ------- ------ ---- --
Titus 3:1 Titus 3 1 1
1 Timothy 2:1-2 1 Timothy 2 1-2 1 2
This code is part of a larger script I'm working on to take a file of scripture references and return the full text to aid me in developing Bible studies.
Credit goes to RegexLib for the starting regex that I modified capture the data into groups. Many times it is easier to find something to start with and extend it to what is desired.
No comments:
Post a Comment